红宝石自己。vs @ 初始化

Ale*_*x A 0 ruby

Ruby 中的新功能,试图弄清楚为什么您会选择一种变体而不是另一种变体。你能写一个例子,其中一个比另一个更受欢迎吗?

class User
    attr_accessor :username
    def initialize(username)
       self.username = username
    end
end

class User
    attr_accessor :username
    def initialize(username)
        @username = username
    end
end
Run Code Online (Sandbox Code Playgroud)

Leo*_*ito 5

他们是一样的东西。

self.username =调用username=由 attr_accessor 定义的函数。该函数如下所示:

def username=(value)
  @username = value
end
Run Code Online (Sandbox Code Playgroud)

如您所见,它与您提到的“替代方案”相同。

编辑使用访问器(即调用由 attr_accessor/reader/etc 定义的函数)比其他形式的访问快得多。评论中有一些链接,详细说明了这一点。