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)

另一个非二进制表示法:实例变量包含与堆栈相同的类和结构的二进制表示法:如果实例变量是值,它将“嵌入”到当前类/结构中,如果它是引用,实例变量将是指针。