我应该用自己的红宝石.要么 @

Nic*_*ilt 25 ruby

这是我的红宝石代码

class Demo
  attr_accessor :lines

  def initialize(lines)
    self.lines = lines
  end
end
Run Code Online (Sandbox Code Playgroud)

在上面的代码我可以使用

    @lines = lines
Run Code Online (Sandbox Code Playgroud)

大多数情况下,我看到人们在初始化方法中使用@.在这两者中有没有一种首选方式?为什么?

mip*_*adi 41

使用时@lines,您正在访问实例变量本身.self.lines实际上是经历lines了班级的方法; 同样,self.lines = x通过这个lines=方法.因此,@当您想要直接访问变量时,以及self.希望通过该方法访问时,请使用.

要直接回答您的问题,通常您希望直接在initialize方法中设置实例变量,但这取决于您的用例.


egg*_*ie5 5

self.lines是一个方法,@lines是实例变量.在你的构造函数中,你会想要使用self.lines,但我认为这是有争议的.这真的只是一种风格差异.如果您想深入讨论直接与间接变量访问,请阅读Kent Beck的Smalltalk最佳实践模式一章.