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