【发布时间】:2015-04-07 02:04:12
【问题描述】:
我想像这样传递两个函数:
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 或其他东西。我该怎么办?
【问题讨论】:
-
说到堆栈溢出,这不就是调用
add_user_review时的结果吗? -
你的
check_set可以重构为def check_set(_, training_method, _); training_method end。 -
当我调用
add_user_review时产生的错误是未定义的方法add_user_reviewfor nil::NilClass。这是因为@test_data不存在。该方法在将结果传递给check_set之前执行这两种方法,而我想要的是让check_set决定应该调用哪个方法。 -
是
check_set从其他地方调用的吗?
标签: ruby