我想知道一个类或任何变量是否被链接到一个或多个方法?它会给出哪个回报值? (Class.method1.method2
- >返回值是多少?)
鉴于以下代码:
restaurants = []
restaurants << Restaurant.new.import_line(line.chomp)
def import_line(line)
return self
end
在这种情况下,两个方法(new
和import_line(line)
都会返回实例,所以我知道实例会被放入数组中。我很好奇,如果import_line(line)
,返回类似的东西true
def import_line(line)
return true
end
Restaurant.new.import_line(line.chomp)
上的返回值是多少?它会被设置为true
还是返回实例(.new
返回实例)?
实质上,当Class.method1.method2
或Variable.method1.method2
存在时,哪种方法优先确定返回值?
非常感谢任何帮助!
答案 0 :(得分:2)
返回值总是链中的最后一件事,没有例外。结果不一定是你期望的事情,因为链条中的最后一件事可能会做一些棘手的事情。
例如,为了清楚起见:
Restaurant.new.import_line do |line|
line + '!'
end
此处import_line
没有义务返回该区块的结果,而且通常情况下它不会获胜。
您还可以在某些情况下完全切换链接的东西,让您措手不及,这样您就必须确定您正在调用的链中每个函数的返回值。
此处示例:
"help!".gsub!(/!/, '?').length
# => 5
"help?".gsub!(/!/, '?').length
#! NoMethodError: undefined method `length' for nil:NilClass
在这种情况下gsub!
当且仅当进行了更改时才会返回字符串,否则为nil
,这意味着在这种情况下您无法将其链接。