gpt4 book ai didi

ruby - 在 Ruby 中,self.user_name 与@user_name 不一样吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:49 27 4
gpt4 key购买 nike

在Ruby 中,不是像@foo 这样的实例变量和@@bar 这样的类变量吗?

在一些代码中,我看到了一些

self.user_name = @name

甚至

a += 1 if name != user_name   # this time, without the "self."
# and it is the first line of a method so
# it doesn't look like it is a local variable

self 是为了什么?我认为它可能是一个访问器,但它不能只是 user_name 而不是 self.user_name 吗?而且我什至没有看到任何使其成为访问器的代码,例如 attr_accessor,而且也不在基类中。

最佳答案

在 ruby 中:

  • @foo是一个实例变量
  • @@bar是类变量

实例和类变量默认是私有(private)的。这意味着,您不能在类或模块本身之外设置或获取值。

如果你想为 foo 设置一个值,你需要一个属性访问器。

class Model
def foo
@foo
end

def foo=(value)
@foo = value
end
end

为了方便(和性能原因),这与

class Model
attr_accessor :foo
end

然后你可以做

m = Model.new
m.foo = "value"

在类里面你可以做

class Model

# ...

def something
self.foo = "value"
# equivalent to
@foo = value
end

end

关于ruby - 在 Ruby 中,self.user_name 与@user_name 不一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com