gpt4 book ai didi

ruby - method_missing 在 instance_eval 中

转载 作者:数据小太阳 更新时间:2023-10-29 08:25:34 25 4
gpt4 key购买 nike

完整代码:http://friendpaste.com/5TdtGPZaEK0DbDBa2DCUyB

class Options
def method_missing(method, *args, &block)
p method
end
end

options = Options.new

options.instance_eval do
foo
foo = "It aint easy being cheesy!"
end

puts "#===---"
options.foo
options.foo = "It still aint easy being cheesy!"

返回:

:foo
#===---
:foo
:foo=

因为它将 foo = "" 视为 instance_eval 中的局部变量,所以它不会将其识别为方法。

我如何让 instance_eval 将其视为一种方法?

最佳答案

表达式 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

这避免了等号问题。

关于ruby - method_missing 在 instance_eval 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com