我无法找到此概念的权威示例或讨论。如果我的Ruby方法中有两个变量是数字,我需要将它们初始化为零。他们将被用作计数器。这是好还是安全?它在我的测试中起作用。在同一行上初始化两个变量
取而代之的是:
foo = 0
bar = 0
你可以做到这一点?
foo = bar = 0
这似乎是一个很好的方式,以节省线路,仍然有表现。或者,这是不好的做法?我意识到我会牺牲一点可读性。但是,在一个小的Ruby方法(< 10行)中,这可能不是一个有效的关注点。
我无法找到此概念的权威示例或讨论。如果我的Ruby方法中有两个变量是数字,我需要将它们初始化为零。他们将被用作计数器。这是好还是安全?它在我的测试中起作用。在同一行上初始化两个变量
取而代之的是:
foo = 0
bar = 0
你可以做到这一点?
foo = bar = 0
这似乎是一个很好的方式,以节省线路,仍然有表现。或者,这是不好的做法?我意识到我会牺牲一点可读性。但是,在一个小的Ruby方法(< 10行)中,这可能不是一个有效的关注点。
在很多语言中,后者将两个变量分配给同一个对象,如果该对象是可变的,则会造成麻烦。最好做到这一点:
foo, bar = 0, 0
它是安全的,它的工作原理。
完全取决于您的编码标准,不管这样的事情是否被压抑。
使用它,等待时间到了以后重构。
在同一行上初始化两个变量是很好的做法,只要该值被分配为简短且易于遵循。您甚至可以使用数组语法分配两个不同的值。
foo = bar = 123
foo #=> 123
bar #=> 123
foo, bar = 1, 2
foo #=> 1
bar #=> 2
谢谢!我很喜欢:foo,bar = 1,2我没有想到那个。它仍然可读。 – mrjabba 2011-05-14 15:53:14
这工作,但你应该知道,这是因为您使用的是数字变量,这是在Ruby中不变的只是您的情况是安全的。如果你有一个字符串尝试同样的事情,例如,你可能最终会与一些行为,没想到你:
ruby-1.9.2-p180 :001 > foo = bar = "string"
=> "string"
ruby-1.9.2-p180 :002 > foo.upcase!
=> "STRING"
ruby-1.9.2-p180 :003 > bar
=> "STRING"
这很奇怪。
伊格纳西奥巴斯克斯 - 艾布拉姆斯的答案是与不同的价值观与初始化变量真:
a, b = 123, 456
不过,我觉得你的问题是做好以下工作:
a = b = "hello"
别急!上面的行为变量a
和b
分配相同的存储地址,即
a.object_id
和b.object_id
是相等的。因此a
上的任何更改都会持续在b
上。
我不喜欢它,但解决方法可能是。
x = "a very long string or something you don't want to type multiple times"
a, b, c = x.clone, x.clone, x.clone
哦,我希望能有这样的一种优雅的方式。
对我来说这看起来很优雅... – 2016-12-13 21:32:05
在某些语言中是正确的,但在Ruby中与所提问题无关。 IMO完全没问题。 – Phrogz 2011-05-14 15:58:04
@Progrog,这在Ruby中工作正常。 – jasonleonhard 2015-11-26 22:27:45
它工作正常,但不推荐,可读性较差。 https://github.com/bbatsov/ruby-style-guide#parallel-assignment – 2017-01-08 19:00:32