0
This works:

class MyAwesomeClass

variable_of_doom = ["things", "stuff", "chunky_bacon"]  

  variable_of_doom.each do |name|
    define_method("#{name}") do
      puts name
    end
  end
end

puts (MyAwesomeClass.instance_methods - Object.instance_methods).inspect

# => ["things", "stuff", "chunky_bacon"]

これはそうではありませんが、これは私が必要とするものです:

variable_of_doom = ["things", "stuff", "chunky_bacon"]  

class MyAwesomeClass

  variable_of_doom.each do |name|
    define_method("#{name}") do
      puts name
    end
  end
end

puts (MyAwesomeClass.instance_methods - Object.instance_methods).inspect
# => NameError: undefined local variable or method ‘variable_of_doom’ for MyAwesomeClass:Class

# => method <class:MyAwesomeClass>  in untitled 4 at line 9
# => method <main>  in untitled 4 at line 7
4

5 に答える 5

0

代わりに、variable_of_doom を Class スコープに移動することは良い考えです。

于 2013-06-24T08:38:30.160 に答える
0

Ruby では、$インスタンス変数が で示されるのと同様に、グローバル変数の必要性は で示されます@。したがって、これは機能します:

$variable_of_doom = ["things", "stuff", "chunky_bacon"] 
class MyAwesomeClass

  $variable_of_doom.each do |name|
    define_method("#{name}") do
      puts name
    end
  end
end

puts (MyAwesomeClass.instance_methods - Object.instance_methods).inspect
# => [:things, :stuff, :chunky_bacon]
于 2013-06-22T14:14:31.080 に答える