在Ruby中,函數可以返回多個*值。 Ruby函數可以確定其調用代碼所期望的返回值數量是多少?Ruby函數可以檢測請求返回值的數量嗎?
例如:
a = f() # caller expects one return value
a, b = f() # caller expects two return values
a, b, c = f() # caller expects three return values
如果我們讓r
是預期回報值的數量,是否有可能編寫一個函數f
,使得它可以找到r
?
具體來說,我們怎麼可能改變rcount
定義,下面,這樣是通過以下測試:
a, b = rcount()
puts "#{a},#{b}" # FAIL, DESIRED: "2,1" ACTUAL: "1,"
a, b, c = rcount()
puts "#{a},#{b},#{c}" # FAIL, DESIRED: "3,2,1" ACTUAL: "1,,"
a, b, c, d = rcount()
puts "#{a},#{b},#{c},#{d}" # FAIL, DESIRED: "4,3,2,1" ACTUAL: "1,,,"
凡rcount
的定義是這樣的:
def rcount()
ret = []
r = nil # <== Q. IS IT POSSIBLE TO GET r PROGRAMMATICALLY?
r ||= 1
last = r - 1
(0..last).each do |i|
ret[i] = r - i
end
ret
end
*其實多回報值是語法糖,真正的返回值是單個數組。所有的Ruby函數都只返回一個值。
爲什麼你使用這個函數'a,b,c = rcount(3)'如果你只能用:'a,b,c =(1..3).to_a' – gustavotkg
可能是一個函數的例子 –
@gustavotkg,'rcount'是一個簡單的函數來演示我的問題灰。這不一定意味着有用。我出於好奇而提出這個問題,並提高了我對Ruby的理解。 – jwfearn