gpt4 book ai didi

ruby - 在方法定义中将等号 ('=' ) 放在方法名称之后有什么作用?

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:13 25 4
gpt4 key购买 nike

我在截屏视频中看到了这一点,只是想知道“=”符号在这种情况下的作用。

def express_token=(token)
...
end

如果是这样的话我会理解的——

def express_token(token = nil) 

上面(第二个代码片段)表示将 nil 设置为 tokens 参数的默认值。但是,在第一个代码片段中,'=' 在括号之外。

最佳答案

该片段定义了一个 Virtual Attribute (或“setter”方法)使“express_token”看起来像一个属性,即使它只是方法的名称。例如:

class Foo
def foo=(x)
puts "OK: x=#{x}"
end
end
f = Foo.new
f.foo = 123 # => 123
# OK: x=123

请注意,对象“f”没有名为“foo”的属性或实例变量(也不需要),因此“foo=”方法只是语法糖,用于允许看起来像赋值的方法调用。另请注意,无论任何 return 语句或最终值如何,此类 setter 方法总是返回它们的参数。

如果您正在定义顶级 setter 方法,例如,在“irb”中,那么行为可能会有点困惑,因为隐式地向 Object 类添加了方法。例如:

def bar=(y)
puts "OK: y=#{y}"
end
bar = 123 # => 123, sets the variable "bar".
bar # => 123
Object.new.bar = 123 # => 123, calls our method
# OK: y=123
Object.public_methods.grep /bar/ # => ["bar="]

关于ruby - 在方法定义中将等号 ('=' ) 放在方法名称之后有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398919/

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