好吧,我有一个 question
对象,如您所见,它会收到参数 true / false
,我想要的是,在变量 question_type
中,给定 questions[:q1]
的值,它被分配为 question_type_true
或question_type_false
能够在每个内部执行它。
questions = {
q1: true,
q3: true,
q4: true,
q5: true,
q6: true,
q7: true,
q8: true
}
question_type = questions[:q1] == true ? question_type_true : question_type_false
questions.each do |key, value|
question_type(value)
end
def question_type_true(question)
p "true function #{question}"
end
def question_type_false(question)
p "false function #{question}"
end
示例:
questions = { q1: false, q3: true, q4: true}
输出:
p "true function false"
p "true function true"
p "true function true
您只将方法的名称存储为符号
question_type = questions[:q1] ? :question_type_true : :question_type_false
然后 send
您希望方法运行的对象的符号:
questions.each do |key, value|
send question_type, value
end
您可以调用Object#method
以获取对Method
的引用,然后call
IT:
question_type = questions[:q1] == true ? method(:question_type_true) : method(:question_type_false)
questions.each do |key, value|
question_type.call(value)
end
请注意,您需要定义方法,然后才能调用method
进行检索:
# works:
def some_method; end
method(:some_method)
# undefined method error:
method(:some_method)
def some_method; end
因此,您需要将方法定义移至给出的示例的顶部。
如果您需要的方法是某物上的实例方法,则可以通过在实例上调用method
访问它:
o = Object.new
o.method(:nil?)
类似地,如果是类方法:
Object.method(:new)