'&功放;:'使用' is_a(整数)'

时间:2018-05-21 12:03:20

标签: ruby

我想要这段代码:

ngModule

使用[1,2,3].all? {|x| x.is_a?(Integer)} 方法工作,如:

&:

但是我收到了这个错误:

[1,2,3].all?(&:is_a?(Integer))

我猜是因为我将syntax error, unexpected '(', expecting ')' 称为符号。

如何将整数传递给is_a?(Integer)

2 个答案:

答案 0 :(得分:3)

这是不可能的。您无法将Integer(或其他任何内容)传递给符号:is_a?。符号不会引起争论。 Ruby中没有对象接受参数(没有方法调用)。

顺便说一句,没有&:这样的东西。

答案 1 :(得分:2)

你可以用lambda接近你想要的符号:

is_an_int = ->(o) { o.is_a?(Integer) }
[1,2,3].all?(&is_an_int)

或更近,一个返回lambda的lambda:

is_a = ->(c) { ->(o) { o.is_a?(c) } }
[1,2,3].all?(&is_a[Integer])

在这种情况下可能比它的价值更麻烦,但也是有用的技术。