ruby 的x, y = "a", "b"语法真的很帅,有时一个函数需要返回多个值,两个结合可以写出很帅的代码。
x, y = "a", "b"
如需要定义一个方法同时返回最大值 max 和最小值 min:
class MyClass def some_method ["max", "min"] end end
调用方法:
max, min = MyClass.new.some_method
不就是返回数组吗
这种情况,我宁愿返回一个 Hash。
这中语法还是交换变量的时候最爽
x = 1 y = 2 x, y = y, x
很多语言都支持,比如 python 和 lua. php 其实也支持,不过要加个 list,比较 ugly
为了一个 method 只干一件事,还是拆成两个 method 比较好
#1 楼 @hooopo 实际上就是数组,技术含量虽然不高,但感觉看上去很直观。 #2 楼 @lgn21st 返回 hash 也行啊。
def some_method {:max => 100, :min => 1} end
只是调用时取值要写 key,比数组麻烦一点:
max, min = MyClass.new.some_method[:max], MyClass.new.some_method[:min]
#6 楼 @camel 其实我一直在想的是有没有一个典型的 user case,这个 case 在任何情况下调用的结果都必须返回两个对象?
这个语法糖的关键是在赋值的时候,而不是在返回的时候。这个返回就是个数组而已...
#7 楼 @lgn21st 我觉得没有"必须"的情况... 因为他必然可以拆分成两个...
#6 楼 @camel 这个有点像模式匹配呀 虽然没有 erlang 那么强大。
http://rubyeye.herokuapp.com/articles/13-pattern-match-in-ruby
#9 楼 @hooopo 很棒的 idea~ ! 如果没记错的话,Ruby 并没有实现尾递归优化, 即使我们写出了尾递归的代码,如果递归层次太深,依然会报 SystemStackError :)
有办法返回值不要塞在数组里吗?一般返回 $ foo => [1, 2] 可以像这样返回么?
$ foo => [1, 2]
$ foo 1 2
查了下应该是不行,得放入变量才行,不过看到一个很有趣的代码:
https://gist.github.com/peterhellberg/2081118