2015-02-07 2 views
2

Рубин имеет такой красивый синтаксический сахар, что я был уверен, что это будет работать:магазин оператор в переменной с Руби

f = :+ 
g = 1 f 2 // => 3 

Но, конечно, это не так.

Есть ли что-то подобное? Очевидно, есть много простых способов сделать это, но обязательство Ruby к удивительному сахару распространяется на то, что делает это?

ответ

3

Да, вы можете сделать это с Object#public_send способом:

f = :+ 
puts 1.public_send(f, 2) # => 3 

Из документации:

Запускает метод идентифицированной символа, передавая ему какие-либо аргументы, указанные. В отличие от #send, #public_send вызывает только общедоступные методы.

+0

«он обходит проверки видимости» - именно поэтому вы используете 'public_send', если вы специально не хотите обходить видимость. –

+0

Спасибо @ JörgWMittag, я не знал об этом аналоге, обновил ответ –

Смежные вопросы