she*_*edd 3 ruby variables scope ruby-on-rails
我对使用Ruby变量范围的最佳实践有疑问class_eval.
在此代码中,在class_eval块中,第一个和第二个局部变量是未定义的.
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
Run Code Online (Sandbox Code Playgroud)
这似乎是一个范围问题,因为我发现让它工作的唯一方法是制作第一和第二类级变量:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |