2014-10-31 69 views
7

當我編寫:[email protected]:[email protected]時,它們被評估爲:~:!,這也可以通過編寫:~:!來實現。這些表達式是如何分析的,以及@去哪裏了?`:〜@`和`:!@`解析?

+1

@engineersmnky,我認爲它是指一個符號。 – 2014-10-31 20:08:22

+0

您可能想要注意': - @'按預期工作,但是':!@'不是,而' - @'是一元否定方法,但'!@'不是方法。 – 2014-10-31 20:23:30

+1

根據ruby_parser,它無處可去:'RubyParser.new.parse(「:〜@」)#=> s(:lit,:〜)' – ThomasSevestre 2014-10-31 20:43:46

回答

1

這與解析器中的優先級有關。一個簡單的衝刺擊敗結腸手段 - 一個符號語法,太:

2.1.2 :004 > c = :test-thing 
NameError: undefined local variable or method `thing' for main:Object 

這是很容易解決的,雖然:儘量:'[email protected]'

(當然,如果你能避免產生這樣的一個奇怪的符號在你的代碼中,這可能是一個更好的主意......)

+1

如果這樣解析,那麼沒有問題。問題在於它被靜靜地解析爲另一件事。而且,這不是一個奇怪的符號。它是一個方法名稱,它也應該是這種方法的方法定義的返回值。 – sawa 2014-11-06 14:49:07

+0

@sawa - 我當然認爲它應該引發一個錯誤,就像在我的'事情'例子中。通過「怪異」我只意味着'@'具有特定的ruby含義,即類屬性的前綴,因此我認爲解析器將它視爲一種特殊情況。 – 2014-11-06 16:00:26