【发布时间】:2011-03-26 14:49:01
【问题描述】:
我忘记了 Ruby 中的 x = y 使 x 与 y 引用同一个对象,这让我被咬过几次;我已经习惯了用 Ruby 术语表示x = y.dup 的语言。忘记这一点,当我认为在作业的右侧是安全的时,我无意中更改了y。
我知道在没有特殊原因的情况下避免简单的x = y 分配是有意义的,但同样的事情可能潜伏在其他地方,例如
name = (person.last_name.blank? ? 'unknown' : person.last_name)
后来的name << title 实际上会更改 person.last_name 而不仅仅是名称。
如果这也发生在你身上,你是如何学会避免它的?是否有某些危险信号或模式需要寻找?你对你所做的每一项任务都持怀疑态度吗?你经常使用.dup 吗?我不知道 Ruby 的使用是否会成为我的第二天性,所以欢迎任何有用的提示。
【问题讨论】:
-
只是好奇,你是从什么语言转向 Ruby 的?
-
Mladen -- 主要是对从 6510 和 IBM 360 汇编到 PL/I、Pascal、C++、Forth 的各种不同的尝试。不是任何方面的专家......通常我真正的工作是成为一名医生。
-
在我看来,这是您在编程时必须注意的事情之一。 Pascal 使用
:=进行赋值和=进行比较,解释BASIC 使用=进行两者,Perl 使用eq进行字符串比较,==进行数字比较,=进行赋值,基本上你必须把它们都放在你的脑海里。这就是为什么注释、编写干净易懂的代码如此重要的原因。重新审视几个月或几年前编写的代码已经够难的了,然后添加一种具有其独特性的不同语言......这足以让你的大脑流行起来。
标签: ruby variable-assignment equals-operator dup