Ruby中最好的做法是避免滥用赋值"="?

Mik*_*yth 3 ruby variable-assignment dup equals-operator

忘了x = y在Ruby中让x引用与y相同的对象,我被咬了几次.在Ruby术语中,我已经习惯了语言x = y.dup.忘掉这一点,y当我认为在作业的右侧是安全的时候,我无意中改变了.

我可以看到,x = y没有特殊原因避免简单的任务是有意义的,但同样的事情可能潜伏在其他地方,如

name = (person.last_name.blank? ? 'unknown' : person.last_name)
Run Code Online (Sandbox Code Playgroud)

以后name << title实际上会更改person.last_name而不仅仅是名称.

如果这也发生在你身上,你是如何学会避免它的?是否有某些红旗或图案需要寻找?你对每个作业都怀疑吗?你经常使用.dup吗?我不知道Ruby的用法是否会成为我的第二天性,所以任何有用的提示都会受到欢迎.

tok*_*and 5

这可能听起来像Ruby这样的(基本上是命令式的)语言是非正统的,但我的建议是:通过不更新对象来避免附带损害(除非严格必要); 而是创建新的.您需要付出一些性能,但是您将获得更清晰,更紧凑,更模块化且更易于调试的代码.

http://en.wikipedia.org/wiki/Functional_programming

因此,在您的示例中,只需使用新名称创建一个新字符串:

complete_name = name + title
Run Code Online (Sandbox Code Playgroud)

  • 换句话说,使用`name + = title`而不是上面的`name << title`. (3认同)