Crystal lang 如何在Crystal中实现类的实例变量?
如果我有一个Crystal lang 如何在Crystal中实现类的实例变量?,crystal-lang,Crystal Lang,如果我有一个A的实例,那么实例变量是否实现为指针?换句话说,即使在使用结构时,实例变量是否通过引用访问 class A @title = "the title" @my_val = MyStruct.new end @my_val是对堆栈上的MyStruct实例的引用。检查此示例并注意差异: struct MyStruct property x def initialize(@x : Int32) end end class A getter my_val = My
A
的实例,那么实例变量是否实现为指针?换句话说,即使在使用结构时,实例变量是否通过引用访问
class A
@title = "the title"
@my_val = MyStruct.new
end
@my_val
是对堆栈上的MyStruct
实例的引用。检查此示例并注意差异:
struct MyStruct
property x
def initialize(@x : Int32)
end
end
class A
getter my_val = MyStruct.new(10)
end
# mutates a struct (passed by reference)
def method(a : A)
a.my_val.x = 20
end
# does not mutate a struct (passed by value)
def method(s : MyStruct)
s.x = 30
end
a = A.new
p a.my_val.x #=> 10
a.method(a)
p a.my_val.x #=> 20
a.method(a.my_val)
p a.my_val.x #=> 20 (not 30)
另一个非二进制表示法:实例变量包含与堆栈相同的类和结构的二进制表示法:如果实例变量是值,它将“嵌入”到当前类/结构中,如果它是引用,实例变量将是指针。