gpt4 book ai didi

ruby - Kernel#__method__ 在动态定义的方法中似乎无法正常工作

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

我一直在尝试在 Ruby 1.9 中动态定义一些实例方法。这是我一直用来尝试的代码:

class Testing
[:one, :two].each do |name|
define_method(name) do
puts __method__
end
end
end

这是输出:

ruby-1.9.2-p180 :008 > t = Testing.new
=> #<Testing:0x00000100961878>
ruby-1.9.2-p180 :009 > t.one
two
=> nil
ruby-1.9.2-p180 :010 > t.two
two
=> nil
ruby-1.9.2-p180 :011 >

我希望结果分别是 onetwo。如果我在迭代之外调用每个方法的 define_method,它会按预期工作。我在这里不明白什么?

这是我在网上看到的在迭代中调用 define_method 的众多示例之一。 Dynamically defined setter methods using define_method?

缺少什么?

此外:使用 __method__ 对我来说并不重要,但这是我能展示的最好方式,似乎只有发送到 define_method 的最后一个 block 是用于定义的方法。也许这开始向我解释问题,但我仍然不明白..

最佳答案

很好地发现了奇怪的行为。在我测试的所有 ruby 中,只有 MRI 1.9.2 证明了这一点。

赖安戴维斯有 reported the bug on the ruby-core list (引用这个问题)。

关于ruby - Kernel#__method__ 在动态定义的方法中似乎无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5129798/

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