Types 为什么SharedArray的SetIndex使用不可变类型?

Types 为什么SharedArray的SetIndex使用不可变类型?,types,casting,multiprocessing,julia,shared-memory,Types,Casting,Multiprocessing,Julia,Shared Memory,所以我有一个非常简单的问题。我有一个定义如下的类型: # An internal type used only by the train function for caching between epochs. immutable Residual value::Float32 curr_error::Float32 prev_error::Float32 end 我正在Julia中研究一种机器学习算法,希望通过在@Parrelell循环的末尾检查这些值来打破。为了实现

所以我有一个非常简单的问题。我有一个定义如下的类型:

# An internal type used only by the train function for caching between epochs.
immutable Residual
    value::Float32
    curr_error::Float32
    prev_error::Float32
end
我正在Julia中研究一种机器学习算法,希望通过在@Parrelell循环的末尾检查这些值来打破。为了实现这一点,我使用这样定义的ShareDarray

residuals = SharedArray(Residual, size(rating_set.training_set), init = S -> S[Base.localindexes(S)] = [Residual(rating.value, 0.0, 0.0) for rating in rating_set.training_set[Base.localindexes(S)]])
现在,在循环中,我想用一个简单的更新步骤来更新残差。因为它是不可变的,所以我假设我必须创建一个新的剩余对象并将其填充到SharedArray中

residual[j] = Residual(residual.value, -user_feature * item_feature + residual.value, residual.curr_error)
但是,每当我运行代码时,就会出现以下错误

LoadError: MethodError: `setindex!` has no method matching setindex!(::Residual, ::Residual, ::Int64)

我真的不确定我做错了什么,我想这与打字有关?还是我完全误解了茱莉亚?任何帮助都将不胜感激。

嗯,这很尴尬,我在数组中省略了一个s,所以它试图在不可变类型上设置索引。。。我将把这个问题留在这里,以防其他人犯同样的错误。

好吧,这很尴尬,我在数组中留下了一个s,所以它试图在不可变类型上设置索引。。。我将把这个问题留在这里,以防其他人也犯同样的错误