2016-11-08 97 views
0

我想知道如果一個類或任何變量被鏈接到一個或多個方法?它會給予哪個回報值? (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時,哪種方法在確定返回值時具有優先權?

任何幫助將不勝感激!

回答

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,這意味着你不能在這種情況下,IT連鎖。

+2

@tadman很好的回答。更進一步,當你執行'object.method1.method2.method3'時,'object.method1'的結果成爲調用'method2'的對象,其結果成爲'method3'的對象被調用,其結果返回給原來的調用者。 – moveson

+0

優秀的分析@moveson和謝謝你tadman。 – the12