Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 实例\u eval中缺少方法\u_Ruby - Fatal编程技术网

Ruby 实例\u eval中缺少方法\u

Ruby 实例\u eval中缺少方法\u,ruby,Ruby,完整代码: 这将返回: :foo #===--- :foo :foo= 因为它将foo=”“视为instance\u eval中的局部变量,所以无法将其识别为方法 我该如何使实例_-eval将其视为一种方法?Doself.foo=“”将其视为一种方法。表达式foo=“”永远不会是方法调用。它是一个局部变量赋值。这是Ruby语法的一个事实。为了调用setter,必须显式指定接收方。这就是大多数Ruby伪DSL使用Dwemthy样式的原因: class Dragon < Creature

完整代码:

这将返回:

:foo
#===---
:foo
:foo=
因为它将
foo=”“
视为instance\u eval中的局部变量,所以无法将其识别为方法


我该如何使实例_-eval将其视为一种方法?

Do
self.foo=“”
将其视为一种方法。

表达式
foo=“”
永远不会是方法调用。它是一个局部变量赋值。这是Ruby语法的一个事实。为了调用setter,必须显式指定接收方。这就是大多数Ruby伪DSL使用Dwemthy样式的原因:

class Dragon < Creature
  life 1340     # tough scales
  strength 451  # bristling veins
  charisma 1020 # toothy smile
  weapon 939    # fire breath
end
龙类<生物
生命1340#坚韧的天平
强度451#刚毛脉
魅力1020#牙齿般的微笑
武器939#火焰呼吸
结束

这就避免了等号问题。

是的,我想那会有用的。但我试图弄明白这一点的原因是,我不必使用self.foo或options.tap{o | o.foo}来运行方法=/如果您感兴趣,这是我的完整代码:很遗憾,我认为这是不可能的
foo=
将始终被解释为局部变量赋值,并且无法访问块内定义的局部变量。甚至
foo=()
似乎也不起作用。哦,好吧,我想我得按你的方式做。感谢您希望在方法_中捕获“options.foo=”it aint…”做什么?我无法操作它,特别是在散列中设置键/值。它有点像一个结构。检查完整的代码(在文章顶部的链接)哦,天哪,为什么我没有想到这个?太完美了
class Dragon < Creature
  life 1340     # tough scales
  strength 451  # bristling veins
  charisma 1020 # toothy smile
  weapon 939    # fire breath
end