Lambdas和Ruby中的case语句中只有一个参数

时间:2013-12-29 15:48:22

标签: ruby lambda

当我得到它时,你可以在里面使用proc / lambda,切换,例如:

is_even = ->(x) { x % 2 == 0 }

case number
when 0 then puts 'zero'
when is_even then puts 'even'
else puts 'odd'
end

据我所知,从我看到的例子来看,lambdas只能在case语句中使用,因为它只接受1个参数,因为你不能用1个以上的参数做case语句(例如,b是不可能的,除非这些元素可能被包含在一个数组中)。所以基本上如果你尝试在case语句中使用带有多个参数的lambda,代码就会破坏。如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

这是因为:

is_even = ->(x) { x % 2 == 0 }
is_even.lambda? #true

是“lambda”(is_even = lambda(x) { x % 2 == 0 }相当于上面的代码)

存在proc s:

is_even = proc{|x| x % 2 == 0 } # Proc.new{|x| x % 2 == 0 }
is_even.lambda? #false

lambda检查参数的数量。另一方面,proc不会检查参数的数量。

ppp1 = Proc.new{|x| x % 2 == 0 } #=> #<Proc:0x507f300@(pry):152>
ppp1.call(2,3,4,5) #true

ppp2 = ->(x){ x % 2 == 0 } # => #<Proc:0x2c5ac40@(pry):158 (lambda)>
ppp2.(2,4) # ArgumentError: wrong number of arguments (2 for 1)

您可以阅读更多here