0
我想創建一個存儲各種塊的DSL,然後可以調用它們。我希望這是一個可以重複使用的模塊,可以包含在多個類中。如何在Ruby的擴展模塊中使用類實例變量?
我想出了一種使用類變量的方法,但rubocop抱怨並且說我應該使用類實例變量。我無法弄清楚這樣做的方法。可能嗎?
module MyModule
def self.included(base)
base.extend(ClassMethods)
end
def run_fixers
ClassMethods.class_variable_get(:@@fixers).each(&:call)
end
module ClassMethods
def fix(_name, &block)
@@fixers ||= []
@@fixers << block
end
end
end
class MyClass
include MyModule
def initialize
run_fixers
end
fix 'test' do
puts 'testing'
end
end
好的答案。考慮用一個簡短的解釋來解釋爲什麼Robocop建議使用類實例變量而不是類變量,可能有一個更全面的解釋鏈接(比如Brent的回答[here](https:// stackoverflow)。 com/questions/15773552/ruby-class-instance-variable-vs-class-variable)或[this blog](http://thoughts.codegram.com/understanding-class-instance-variables-in-ruby/)) 。 –