Kiedy piszę :[email protected]
i :[email protected]
, są one oceniane na :~
i :!
, które można również uzyskać, pisząc :~
i :!
. W jaki sposób są analizowane te wyrażenia i gdzie jest @
?W jaki sposób przetwarzane są `: ~ @` i `:! @`?
Odpowiedz
Ma to pierwszeństwo w analizatorze składni. Prosta kreska pokonuje składnię okrężnicy środkiem-a-symbol, za:
2.1.2 :004 > c = :test-thing
NameError: undefined local variable or method `thing' for main:Object
To dość łatwo obejść, ale: spróbuj :'[email protected]'
,
(Oczywiście, jeśli można uniknąć tworzenia takich dziwny symbol w twoim kodzie, który może być lepszym pomysłem ...)
Jeśli jest tak analizowany, nie ma problemu. Problem polega na tym, że jest on cicho analizowany jako coś innego. I nie jest to dziwny symbol. Jest to nazwa metody, która powinna również być wartością zwracaną definicji metody takiej metody. – sawa
@sawa - Na pewno myślę, że powinien wywołać błąd, jak w moim przykładzie "rzeczy". Przez "dziwne" miałem na myśli tylko to, że "@" ma określone znaczenie ruby, przedrostek dla atrybutu klasy i jako taki wyobrażam sobie, że parser traktuje to jako specjalny przypadek. –
@engineersmnky, myślę, że to odnosi się do symbolu. –
Możesz zauważyć, że ': - @' działa zgodnie z oczekiwaniami, ale ':! @' Nie działa, a '- @' jest jednoznaczną metodą negacji, ale '! @' Nie jest metodą. –
Zgodnie z ruby_parser nigdzie nie jest: 'RubyParser.new.parse (": ~ @ ") # => s (: lit,: ~)' – ThomasSevestre