诀窍是使用&
它告诉红宝石,如果有必要这样的说法转化为Proc
和然后使用该对象作为方法的块。从Ruby 1.9开始,lambda(匿名)函数有一个快捷方式。所以,你可以这样写代码:
(1..5).map &->(x){ x*x }
# => [1, 4, 9, 16, 25]
将采取数组的每个元素,并计算其功率
它是与此相同的代码:
func = ->(x) { x*x }
(1..5).map &func
为Ruby 1.8:
(1..5).map &lambda {|x| x*x}
# => [1, 4, 9, 16, 25]
解决你的问题,你可以使用阵列的方法reduce
(0
是初始值):
('A'..'K').reduce(0) { |sum,elem| sum + elem.size }
# => 11
传递lambda函数到reduce
是有点麻烦,但匿名块几乎是相同的λ。
('A'..'K').reduce(0) { |sum, elem| ->(sum){ sum + 1}.call(sum) }
# => 11
或者你可以Concat的信件就像这样:
('A'..'K').reduce(:+)
=> "ABCDEFGHIJK"
转换为小写:
('A'..'K').map &->(a){ a.downcase }
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]
方法定义的情况下,把一个符号,在过去的前参数表示一个方法可能需要一个块,并给我们一个名称来引用方法体内的这个块。