我想将两个函数作为方法传递:
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_id
和movie_id
)。
我需要重构我的代码以合并Proc或其他东西。我该怎么办?
答案 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