使用`Object#send`方法作为最佳实践

时间:2016-06-06 01:19:22

标签: ruby ruby-style-guide

很难确定代码的用法,如下所示:

[:create, :update, :pause].each { |action| send("to_#{action}") }

还有其他原因,这是一种反模式吗?

2 个答案:

答案 0 :(得分:5)

它不是反模式。它是语言的一部分。你应该出于上述原因避免使用它,但有时它是唯一的选择。我不认为表现有明显的缺点。至于保持OOP,你应该建议切换到$(document).ready(function() { $(window).scroll(function () { //if you hard code, then use console //.log to determine when you want the //nav bar to stick. console.log($(window).scrollTop()) if ($(window).scrollTop() > 50) { $('.navbar').addClass('active'); } if ($(window).scrollTop() < 50) { $('.navbar').removeClass('active'); } }); }); - 这是推荐的方式。

答案 1 :(得分:1)

有理由使用它,有理由避免它。这个简单的例子是一个反模式的例子,因为它是一个固定的数组,写起来会更简洁:

create
update
pause

如果您有使用它的情况,那么当数组不一定是静态的时,可能会有修改,尤其是在DSL的上下文中使用时。

Rails将此用于before_validation处理程序链,例如,它有一个Symbol引用列表或要调用的Proc函数:

before_validation :check_sanity
before_validation lambda { do_something(1) }