【发布时间】:2011-10-28 10:04:15
【问题描述】:
在 Perl 中基于键和值数组执行哈希更新,我可以执行以下操作:
@hash{'key1','key2','key3'} = ('val1','val2','val3');
在 Ruby 中,我可以用更复杂的方式做类似的事情:
hash.merge!(Hash[ *[['key1','key2','key3'],['val1','val2','val3']].transpose ])
好的,但我怀疑这种程序的有效性。
现在我想在一行中做一个更复杂的赋值。
Perl 示例:
(@hash{'key1','key2','key3'}, $key4) = &some_function();
我不知道这样的事情是否可以通过一些简单的 Ruby 方式实现。有什么提示吗?
对于 Perl 受损者,@hash{'key1','key2','key3'} = ('a', 'b', 'c') 是 hash slice,是这样的简写:
$hash{'key1'} = 'a';
$hash{'key2'} = 'b';
$hash{'key3'} = 'c';
【问题讨论】:
-
问题是
hash{'key1','key2','key3'}是错误的语法。所以你不能这样做 -
Perl 的最后一行是什么?调用函数并使用函数的前三个返回值更新哈希并将局部变量设置为第四个(以及更多?)值?
-
@Phrogz:这是一个哈希片,见第二个代码块in here。
-
@fl00r
@hash{'key1','key2','key3'} = (1, 2, 3);在 Perl 中是完全正确的。 -
最后一行是 Perl,而不是 Ruby。我认为 &some_function 返回值数组,例如:[1,2,3,4]。前三个被保存到散列,所以它看起来像这样:@hash = { 'key1' => 1, 'key2' => 2, 'key3 => 3 }。第四个值存储在 $key4 中。如果 &some_function 返回超过 4 个值,$key4 将存储数组 = [4,5,...]。 (抱歉混用了 Ruby 和 Perl 语法 :)。)
标签: ruby arrays hash variable-assignment