gpt4 book ai didi

ruby-on-rails - class_eval 的类级变量的替代方案?

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

我对使用 class_eval 的 Ruby 变量范围的最佳实践有疑问。

在这段代码中,在 class_eval block 中,局部变量 first 和 second 是未定义的。

def parent_method(opts={})
first = opts[:percent]
second = (10 * first).to_i

SecondClass.class_eval do
def second_method; return {:a => first, :b => second}; end;
end
end

这似乎是一个范围界定问题,因为我发现让它起作用的唯一方法是创建第一类和第二类级别的变量:

def parent_method(opts={})
@@first = opts[:percent]
@@second = (10 * @@first).to_i

SecondClass.class_eval do
def second_method; return {:a => @@first, :b => @@second}; end;
end
end
  1. 此场景的最佳做法是什么?我意识到对于这种情况,全局变量是一个糟糕的选择,因为它产生的范围很广,但是,类级变量是否同样不受欢迎?
  2. 除了处理变量范围之外,是否还有其他方法可以从 class_eval 中解决这些变量的可访问性问题?

最佳答案

问题不是因为class_eval,而是因为def。当您以这种方式定义方法时,它会引入一个新的范围。这是修复它的最佳方法:

def parent_method(opts={})
first = opts[:percent]
second = (10 * first).to_i

SecondClass.class_eval do
define_method(:second_method) { return {:a => first, :b => second} }
end
end

关于ruby-on-rails - class_eval 的类级变量的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167848/

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