Ruby - 将函数作为参数传递

时间:2015-02-06 20:20:00

标签: ruby

我想将两个函数作为方法传递:

def add_user_review(user_id, movie_id, set=:training)
  check_set set, @training_data.add_user_review(user_id, movie_id), @test_data.add_user_review(user_id, movie_id)
end

check_set方法的样子:

# If set is training set, initiate training set function. else, initiate test set function
def check_set(set, training_method, test_method)
  set == :training ? training_method : test_method
end

我的方法有两种,取决于set:training:test)。 @training_data@test_data都是来自其他类的对象,training_method将始终在@training_data上调用,同样适用于test_method@test_data。每种方法都接受不同的参数(即并非所有参数都通过user_idmovie_id)。

我需要重构我的代码以合并Proc或其他东西。我该怎么办?

1 个答案:

答案 0 :(得分:2)

这是一个带有procs的简单实现。只有在call上执行proc时才会执行proc。

 def add_user_review(user_id, movie_id, set=:training)
    check_set set, proc { @training_data.add_user_review(user_id, movie_id) }, proc { @test_data.add_user_review(user_id, movie_id) }
  end

 def check_set(set, training_method, test_method)
   set == :training ? training_method.call() : test_method.call()
 end