ruby 1.9.x, странный разбор, что происходит? - PullRequest
4 голосов
/ 28 октября 2011

Я даже не знаю, какой заголовок дать этому.Может кто-нибудь объяснить мне, что, черт возьми, здесь происходит?Это упрощение того, что я действительно делаю, конечно, если бы это было так, было бы проще сделать это, но почему парсер ruby ​​1.9.x испытывает проблемы с чем-то, что работает в 1.8.x и кажется простым?

 (rdb:2) struct = Struct.new(:foo, :bar).new
 (rdb:2) p struct.send( ( "foo".to_s +'=') , "VALUE")
 NoMethodError Exception: undefined method `+@' for "=":String

ЧТО?Но это прекрасно работает:

 (rdb:2) struct.send( ("foo".to_s) +'=') , "VALUE")

А, подождите, так что, думаю, теперь нужен пробел между оператором '+' и вторым значением?

 (rdb:2) p struct.send( ( "foo".to_s + '=') , "VALUE")

Какого черта?Ruby 1.8.x был в порядке с этим сейчас.Подождите, ruby ​​1.9.x поддерживает унарные префиксные операторы или что-то еще, и он говорит, что у строки нет унарного префиксного оператора "+", если я не оставлю пробел в?

HUH?Кто-нибудь может это прояснить?

1 Ответ

3 голосов
/ 28 октября 2011

Ruby 1.8.7 также поддерживает унарный + и выдает такую ​​же ошибку для +'='.

Я бы предположил, что что-то изменилось в логике синтаксического анализа, и +'=' анализируется как унарный плюс в вашем выражении. Я бы не стал считать это ошибкой.

...