【问题标题】:Assign array of values to array of variables将值数组分配给变量数组
【发布时间】:2018-05-29 10:31:53
【问题描述】:

我有像

这样的变量数组

a,b,c = [10,20,30]

values = [1, 2, 3]

下面的变量 a、b、c 到 d

d = [a,b,c]

有什么方法可以在不迭代的情况下为变量赋值,比如 d = values 让我得到以下信息?

a = 1,b = 2,c = 3

【问题讨论】:

  • a,b,c = values
  • 您写道,您有一个变量数组,但您不能。 [a, b, c] 不是变量数组。它们实际上是各个变量引用的一些值。
  • “最初我有......现在,我有......” – 我不关注。你拥有什么,你想要什么?即您的实际输入和预期结果是什么?
  • 感谢您的澄清。还有一件事:你为什么称a,b,c = [10,20,30] 为“变量数组”? [10,20,30] 是一个数组,而是一个 数字 的数组。另一方面,a, b, c = ... 是一个assignment。请详细说明一下好吗?
  • 关于 "... 任何在不迭代的情况下为变量赋值的方法" – 你将如何使用迭代来解决它?一个尝试性的解决方案可以解决这个问题。

标签: ruby local-variables


【解决方案1】:

使用

a,b,c = values
a #=> 1
b #=> 2
c #=> 3

对于更新部分: 拥有d = [a,b,c] 并考虑分配d = values 并期望a、b、c 改变是行不通的,因为d = [a,b,c] 是一个分配,d 设置为[10,20,30]

也许,这样的事情可能有助于理解如何实现这一目标:

a, b, c = [10, 20, 30]

values = [1,2,3]
d = -> (x) { a, b, c = x }
a #=> 10
b #=> 20
c #=> 30
d.call values
a #=> 1
b #=> 2
c #=> 3

d 在上述情况下是lambda,它们被命名为块,可以稍后调用。它们与当前范围内的变量绑定,因此可以在调用时更改它们(d.call

【讨论】:

  • d 发生了什么?
  • OP 已将问题从stackoverflow.com/revisions/… 更改。
  • 我知道。 OP 仅将变量名称从 variables 更改为 d。那么variables 发生了什么?
猜你喜欢
  • 1970-01-01
  • 2014-03-27
  • 2016-12-12
  • 2023-03-04
  • 2020-11-01
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
相关资源
最近更新 更多