使用条件(ruby)为函数赋值

时间:2018-03-23 19:28:49

标签: ruby

我有一个question对象,你可以看到它接收参数true / false,我希望在变量question_type中给出questions[:q1]的值它被分配了一个函数question_type_truequestion_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

2 个答案:

答案 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