方法链接时,如何确定返回哪个返回值?

时间:2016-11-08 00:14:00

标签: ruby

我想知道一个类或任何变量是否被链接到一个或多个方法?它会给出哪个回报值? (Class.method1.method2 - >返回值是多少?)

鉴于以下代码:

restaurants = []
restaurants << Restaurant.new.import_line(line.chomp)

def import_line(line)
 return self
end

在这种情况下,两个方法(newimport_line(line)都会返回实例,所以我知道实例会被放入数组中。我很好奇,如果import_line(line),返回类似的东西true

def import_line(line)
   return true
end

Restaurant.new.import_line(line.chomp)上的返回值是多少?它会被设置为true还是返回实例(.new返回实例)?

实质上,当Class.method1.method2Variable.method1.method2存在时,哪种方法优先确定返回值?

非常感谢任何帮助!

1 个答案:

答案 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,这意味着在这种情况下您无法将其链接。