回答
def sumdiff(x, y)
return x+y, x-y
end
#=> nil
sumdiff(3, 4)
#=> [7, -1]
a = sumdiff(3,4)
#=> [7, -1]
a
#=> [7, -1]
a,b=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
a,b,c=sumdiff(3,4)
#=> [7, -1]
a
#=> 7
b
#=> -1
c
#=> nil
雖然返回多個值通常是有用的,我通常會發現這是一個指向一個新的對象的要求。
也就是說,我通常會發現那些返回值在意義/上下文中緊密聯繫在一起,並且都是這樣傳遞的。所以在這些情況下,我會創建一個新的對象來將它們連接在一起。這是我學會識別的一種特殊的代碼味道。
更自由,更多的責任。有經驗的rubyist會利用它並寫出一些漂亮的代碼。而紅寶石新手可能會讓事情變得更糟。 – fengd 2013-11-05 17:07:32
很明顯,情況並非總是如此,否則'chunk'就不會存在。優秀的原則,但。代碼聞起來確實。搖滾。 – Fuser97381 2015-11-26 16:18:35
Ruby有解構綁定的限量表:
ary = [1, 2, 3, 4]
a, b, c = ary
p a # => 1
p b # => 2
p C# => 3
a, b, *c = ary
p C# => [3, 4]
a, b, c, d, e = ary
p d # => 4
p e # => nil
它還具有結構綁定的限量表:
a = 1, 2, 3
p a # => [1, 2, 3]
你可以結合這兩種形式,像這樣:
a, b = b, a # Nice way to swap two variables
a, b = 1, 2, 3
p b # => 2
def foo; return 1, 2 end
a, b = foo
p a # => 1
p b # => 2
您可以使用解構/結構化綁定來做其他幾件事情。我沒有在右側顯示使用圖示操作符(*
)。我沒有顯示嵌套(使用parantheses)。我沒有表明可以在塊或方法的參數列表中使用解構綁定。
這裏只是一道開胃菜:
def foo(((a, b, c, d), e, *f), g, *h)
local_variables.sort.each do |lvar| puts "#{lvar} => #{eval(lvar).inspect}" end
end
foo([[1, 2, 3], 4, 5, 6], 7, 8, 9)
# a => 1
# b => 2
# c => 3
# d => nil
# e => 4
# f => [5, 6]
# g => 7
# h => [8, 9]
你可以做到這一點也返回一個數組,像
def sumdiff(x, y)
[x+y, x-y]
end
這似乎功能上等同於
def sumdiff(x, y)
return x+y, x-y
end
- 1. 從方法中返回多個值
- 2. 從方法返回兩個值
- 3. 的java:從方法返回多個值
- 4. 從單一方法返回多個值
- 5. Android - 從方法返回多個值
- 6. 返回兩個或多個泛型類型的Java方法
- 7. 從方法中返回多個結果
- 8. 從方法中返回三個值
- 9. 從方法中返回2個值
- 10. Java,從方法中返回一個值
- 11. 我如何從一個方法在C#中返回多個值
- 12. 如何從lua函數返回兩個或更多表?
- 13. 從pandas.rolling_apply返回兩個值
- 14. 從webservice返回兩個值
- 15. Crystal方法返回多個值
- 16. java方法返回多個值
- 17. iOS方法返回多個值NSDictionary
- 18. 方法應該返回多個值
- 19. 在一個方法中返回一個或兩個數組
- 20. 是否有可能從Java中的方法返回多個值?
- 21. 從c#中的方法返回多個值
- 22. 從方法返回更新
- 23. 從OnSensorChanged()方法返回值
- 24. 返回值從isDisplayed方法
- 25. 從回調中返回多個值
- 26. 從插入方法返回一個值
- 27. 如何從兩個嵌套的jquery方法返回值?
- 28. 從一個類返回多個值到方法
- 29. 從組合框中返回兩個值
- 30. 從WebService返回多個值
您應該使用的代碼格式,而不是文本格式。縮進行四個空格,由irb的'>>'提示引起的奇怪現象將消失。 – 2009-12-25 15:31:53
由於顯式返回被認爲是非慣用的Ruby,所以你也可以通過顯式地將返回值放在一個列表中來使用隱式返回:'def foo_and_bar; ['foo','bar'];結束' – Dennis 2014-12-09 13:06:31