2014-10-31 18 views
7

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 `:! @`?

+1

@engineersmnky, myślę, że to odnosi się do symbolu. –

+0

Możesz zauważyć, że ': - @' działa zgodnie z oczekiwaniami, ale ':! @' Nie działa, a '- @' jest jednoznaczną metodą negacji, ale '! @' Nie jest metodą. –

+1

Zgodnie z ruby_parser nigdzie nie jest: 'RubyParser.new.parse (": ~ @ ") # => s (: lit,: ~)' – ThomasSevestre

Odpowiedz

1

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 ...)

+1

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

+0

@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. –