我在一个屏幕上看到了这一点,我只是想知道"="符号在这个例子中的作用.
def express_token=(token)
...
end
如果是这样,我会理解的-
def express_token(token = nil)
上述(第二个代码段)意味着将nil设置为tokens参数的默认值.然而,在第一段代码中,"="在括号外.
我在一个屏幕上看到了这一点,我只是想知道"="符号在这个例子中的作用.
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="方法只是一种语法糖,用于允许类似于赋值的方法调用.还要注意,这种setter方法always返回它们的参数,而不管任何return
语句或最终值.
例如,如果在"irb"中定义顶级setter方法,那么由于向对象类隐式添加了方法,因此该行为可能会有点混乱.例如:
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="]