在stackoverflow和Julia文档中我都找不到以下“设计问题”的答案:
假设我想定义以下对象:
struct Person
birthplace::String
age::Int
end
由于 Person
是不可变的,我很高兴没有人可以更改任何创建的 Person
的出生地,然而,这也意味着随着时间的推移,我也不能更改他们的 age
…
另一方面,如果我定义类型 Person
如下:
mutable struct Person
birthplace::String
age::Int
end
我现在可以让它们年龄增加
,但是我不再拥有之前在出生地
上的安全性,任何人都可以访问并更改它。
目前我找到的解决方法如下:
struct Person
birthplace::String
age::Vector{Int}
end
显然age
是一个1元素的Vector
。我认为这种解决方案相当丑陋,明显不够优化,因为我每次都要用方括号访问年龄。
是否有其他更优雅的方法在对象中同时拥有不可变和可变字段?
也许问题在于我没有意识到在struct
中将所有内容都设置为可变或不可变的真正价值。如果是这样,请您给我解释一下。
incrementage
函数来创建一个带有正确年龄的新对象?例如:incrementage(p::Person) = Person(p.birthplace, p.age+1);
- Tasos Papastylianou