'&:' использование с 'is_a (Integer)' - PullRequest
0 голосов
/ 21 мая 2018

Я хотел бы, чтобы этот код:

[1,2,3].all? {|x| x.is_a?(Integer)}

работал с использованием метода &:, например:

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

, но я получаю эту ошибку:

syntax error, unexpected '(', expecting ')'

Полагаю, это потому, что я звоню is_a?(Integer) как символ.

Как передать Integer в :is_a??

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете приблизиться к нужной записи с помощью лямбды:

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

или даже ближе, лямбда, которая возвращает лямбду:

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

Возможно, больше проблем, чем этостоит в этом случае, но полезные методы, тем не менее.

0 голосов
/ 21 мая 2018

невозможно.Вы не можете передать Integer (или что-либо еще) символу :is_a?.Символ не принимает аргумент.Ни один объект в Ruby не принимает аргумент (без вызова метода).

Кстати, такого понятия, как &:.

, не существует.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...