我有一个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
答案 0 :(得分:1)
您可以致电Object#method
以获取对Method
的引用,然后call
:
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)
答案 1 :(得分:0)
您只需将方法名称存储为符号
question_type = questions[:q1] ? :question_type_true : :question_type_false
然后send
指向要运行该方法的对象的符号:
questions.each do |key, value|
send question_type, value
end