Строка Ruby для оператора
У меня есть массив
operator = ['+', '-', '*', '/']
И я хочу использовать их для решения уравнения по-разному. Я предполагаю, что это будет примерно так:
operator.map {|o| 6 o.to_sym 3 } # => [9, 3, 18, 2]
Как это сделать?
Ответы
Ответ 1
Сделайте, как показано ниже, с помощью Object#public_send
:
operator = ['+', '-', '*', '/']
operator.map {|o| 2.public_send o,2 }
# => [4, 0, 4, 1]
Еще один способ: Object#method
и Method#call
:
operator = ['+', '-', '*', '/']
operator.map {|o| 2.method(o).(2) }
# => [4, 0, 4, 1]
Ответ 2
Другой способ сделать это - использовать try
. Вероятно, причина в том, что try
- более защитная версия отправки.
def try(*a, &b)
if a.empty? && block_given?
yield self
else
__send__(*a, &b)
end
end
Выполнение этого с помощью try
будет выглядеть так:
operator = ['+', '-', '*', '/']
val_to_be_operated = nil
operator.map { |v| val_to_be_operated.try(v, 2) }
# => [nil, nil, nil, nil]
operator.map { |o| val_to_be_operated.method(o).(2) }
# Error
val_to_be_operated = 2
operator.map { |v| val_to_be_operated.try(v, 2) }
# => [4, 0, 4, 1]