2014-10-31 70 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