gpt4 book ai didi

ruby-on-rails - define_method 在调用方法之前不使用变量?

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

我无法从 for 循环中获取变量。似乎 i(var) 是稍后计算的,而不是我完全需要的类定义。

ree-1.8.7-2010.02 > class Pat
ree-1.8.7-2010.02 ?> for i in 39..47
ree-1.8.7-2010.02 ?> define_method("a#{i}".to_sym) do
ree-1.8.7-2010.02 > puts i
ree-1.8.7-2010.02 ?> end
ree-1.8.7-2010.02 ?> end
ree-1.8.7-2010.02 ?> end
#=> 39..47

ree-1.8.7-2010.02 > p = Pat.new
#=> #<Pat:0x103c31140>

ree-1.8.7-2010.02 > p.a39
47
#=> nil

ree-1.8.7-2010.02 > p.a49
NoMethodError: undefined method `a49' for #<Pat:0x103c31140>
from (irb):69
from :0
ree-1.8.7-2010.02 > p.a40
47
#=> nil

我应该使用 def 吗?如果是这样,我怎样才能获得我在此处使用 def 获得的动态方法名称。

最佳答案

那里发生的事情有点微妙...您正在使用的传统 for 循环在所有迭代中共享单个“i”变量...闭包( block 密码到 define_method)正在捕获“i” - 并且因为只有一个“i”,它们都将(在 for 循环的末尾)捕获“i”的最终值,这是您正在循环的范围内的最后一个值。

替代方案:

class C
(1..10).each {|i| define_method("a#{i}") { puts i } }
end

关于ruby-on-rails - define_method 在调用方法之前不使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554793/

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