ary = = [[4, 8], [15, 16], [23, 42]]
在irb中,为什么我可以执行
a = *ary.flatten # => [4,8,15,16,23,42]
但不仅仅是
*ary.flatten
给了我一个错误:
SyntaxError: (irb):97: syntax error, unexpected '\n', expecting '='
from /usr/bin/irb:12:in `<main>'
我也可以执行
a,b,c,d,e,f = *ary.flatten
没有问题,按Enter键后返回的值是
=> [4, 8, 15, 16, 23, 42]
a,b,c,d,e,f现在属于Fixnum类。
那么,
是什么*ary.flatten
毕竟回归?好像它应该返回ary的各个元素(它返回的对象到底是什么?),我可以分配给某些东西:a(以某种方式自动变成数组)或单独的变量a,b,c,d, e,f现在每个都是Fixnum。
此外,
a = *ary.flatten.class # => [Array]
b = ary.flatten.class # => Array
[Array]和Array有什么区别? (也许我应该把它作为一个单独的问题,但我只能每隔90分钟发布一次,我现在想知道!)
答案 0 :(得分:3)
splat将数组转换为对象列表,就像使用逗号明确写出它们一样。所以,显然,它只能用于可以使用这种对象列表的地方。
a = 4, 8, 15, 16, 23, 42
是合法的,是并行作业。
4, 8, 15, 16, 23, 42
不合法,只是SyntaxError
。
那么,
是什么*ary.flatten
毕竟回归?看起来它应该返回ary的各个元素(它返回的对象究竟是什么?),
它不会返回一个对象。它是一个语法结构,允许你获取一个数组并使用它,就好像你已经逐个手写出元素一样。
a = *ary.flatten.class # => [Array] b = ary.flatten.class # => Array
[Array]和Array之间有什么区别?
Array
是一个类,[Array]
是一个包含单个元素的数组,它是类Array
。