【发布时间】:2011-10-27 21:36:13
【问题描述】:
我什至不知道给这个标题是什么。有人可以向我解释这里到底发生了什么吗?这是对我真正在做的事情的简化,当然,如果是这样的话,会有一种更简单的方法来做到这一点,但为什么 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 支持一元前缀运算符之类的,它说如果我不留下空格,字符串就没有一元前缀运算符“+”?
嗯?谁能解决这个问题?
【问题讨论】:
-
"foo".to_s +'='- 在这种情况下,Ruby 认为+"="是to_s的参数。喜欢:"foo".to_s(+"=") -
第二个例子有不匹配的括号。除此之外,对于所有三个代码示例,我在 Ruby 1.8.7 p352 和 1.9.2 r32553 中都有相同的行为。
-
如果一些东西不能被编译器解析,它通常也不能被人类明确地解析。