我在截屏视频中看到了这一点,只是想知道“=”符号在这种情况下的作用。
def express_token=(token)
...
end
如果是这样的话我会理解 -
def express_token(token = nil)
上面(第二个代码片段)的意思是设置 nil 作为 token 参数的默认值。但是,在第一个代码片段中,“=”位于括号之外。
该片段定义了一个虚拟属性 http://ruby-doc.com/docs/ProgrammingRuby/html/tut_classes.html#UC(或“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=”方法只是语法糖,用于允许看起来像赋值的方法调用。另请注意,此类设置方法always返回他们的论点,无论任何return
声明或最终值。
如果您正在定义顶级 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="]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)