Ruby 为什么我可以执行a=*ari.flatte,而不是简单地执行*ari.flatte?
在irb中,为什么我可以执行Ruby 为什么我可以执行a=*ari.flatte,而不是简单地执行*ari.flatte?,ruby,Ruby,在irb中,为什么我可以执行 ary = = [[4, 8], [15, 16], [23, 42]] 但不仅仅是 a = *ary.flatten # => [4,8,15,16,23,42] 这给了我一个错误: *ary.flatten 没有问题,按enter键后返回的值为 a,b,c,d,e,f = *ary.flatten a,b,c,d,e,f现在是Fixnum类 那么,这是什么 => [4, 8, 15, 16, 23, 42] 还是回来?似乎它应该返回ary
ary = = [[4, 8], [15, 16], [23, 42]]
但不仅仅是
a = *ary.flatten # => [4,8,15,16,23,42]
这给了我一个错误:
*ary.flatten
没有问题,按enter键后返回的值为
a,b,c,d,e,f = *ary.flatten
a,b,c,d,e,f现在是Fixnum类
那么,这是什么
=> [4, 8, 15, 16, 23, 42]
还是回来?似乎它应该返回ary的各个元素(它返回的对象到底是什么?),我可以将其分配给某个对象:a(以某种方式自动成为数组)或单独的变量a、b、c、d、e、f,每个变量现在都是Fixnum
而且
[Array]和Array之间有什么区别?(也许我应该把这个问题单独提出来,但我只能每隔90分钟发布一次,我现在想知道!)splat将数组转换为对象列表,就像您使用逗号显式写出它们一样。因此,很明显,它只能在可以使用对象列表的情况下使用
a = *ary.flatten.class # => [Array]
b = ary.flatten.class # => Array
是合法的,这是一项平行任务
a = 4, 8, 15, 16, 23, 42
不合法,这是一个语法错误
那么,这是什么
4, 8, 15, 16, 23, 42
还是回来?似乎它应该返回ary的各个元素(它返回的对象到底是什么?)
它不返回对象。它是一种语法结构,允许您获取一个数组并使用它,就像您已经手工逐个写出元素一样
[Array]和Array之间有什么区别
Array
是一个类,[Array]
是一个具有单个元素的数组,即类Array
splat将数组转换为对象列表,就像您使用逗号显式写出它们一样。因此,很明显,它只能在可以使用对象列表的情况下使用
a = *ary.flatten.class # => [Array]
b = ary.flatten.class # => Array
是合法的,这是一项平行任务
a = 4, 8, 15, 16, 23, 42
不合法,这是一个语法错误
那么,这是什么
4, 8, 15, 16, 23, 42
还是回来?似乎它应该返回ary的各个元素(它返回的对象到底是什么?)
它不返回对象。它是一种语法结构,允许您获取一个数组并使用它,就像您已经手工逐个写出元素一样
[Array]和Array之间有什么区别
Array
是一个类,[Array]
是一个具有单个元素的数组,即类Array
splat将数组转换为对象列表,就像您使用逗号显式写出它们一样。因此,很明显,它只能在可以使用对象列表的情况下使用
a = *ary.flatten.class # => [Array]
b = ary.flatten.class # => Array
是合法的,这是一项平行任务
a = 4, 8, 15, 16, 23, 42
不合法,这是一个语法错误
那么,这是什么
4, 8, 15, 16, 23, 42
还是回来?似乎它应该返回ary的各个元素(它返回的对象到底是什么?)
它不返回对象。它是一种语法结构,允许您获取一个数组并使用它,就像您已经手工逐个写出元素一样
[Array]和Array之间有什么区别
Array
是一个类,[Array]
是一个具有单个元素的数组,即类Array
splat将数组转换为对象列表,就像您使用逗号显式写出它们一样。因此,很明显,它只能在可以使用对象列表的情况下使用
a = *ary.flatten.class # => [Array]
b = ary.flatten.class # => Array
是合法的,这是一项平行任务
a = 4, 8, 15, 16, 23, 42
不合法,这是一个语法错误
那么,这是什么
4, 8, 15, 16, 23, 42
还是回来?似乎它应该返回ary的各个元素(它返回的对象到底是什么?)
它不返回对象。它是一种语法结构,允许您获取一个数组并使用它,就像您已经手工逐个写出元素一样
[Array]和Array之间有什么区别
Array
是一个类,[Array]
是一个具有单个元素的数组,这是类Array
,但仍然对以下内容感到困惑:a=*ari.flatten=>[4,8,15,16,23,42]b=ari.flatte=>[4,8,15,16,23,42]那么类中为什么会有差异,它们中的一个(变量a)是什么呢是一个数组的数组,当它看起来与上面的输出不一样时。这是因为a=*ary.flatte
相当于a.=(*ary.flatte)
它在参数中展平数组,并在给定spat运算符的情况下将元素包装到最终数组中。@evianpring:我不明白你的意思。首先,变量什么都不是。他们没有课。只有对象才有类。变量指向对象a
指向带有单个元素的数组,该元素是类数组
,b
指向类数组
。这里没有数组。我现在明白我遗漏了什么。我认为在a=*ari.flatte.class中,类将应用于*ari.flatte。实际上,*被应用于ari.flatte.class,这样对象类就被强制到一个数组中,所以我得到了一个包含class对象的数组。在b=ary.flatte.class中,类被应用于ary.flatte,所以我只得到类对象数组。@evianpring:啊,现在我明白你的问题了:-D是的,它是(a=(*(Array.flatte.class))
。
操作符绑定非常紧密,是所有操作符中最紧密的。明白了,但仍然对以下内容感到困惑:a=*ari.flatten#=>[4,8,15,16,23,42]b=ari.flatten#=>[4,8,15,16,23,42]那么类中为什么会有差异,其中一个(变量a)是数组的数组,这是因为a=*ari.flatte
相当于a.=(*ari.flatte)
它在参数中展平数组,并在给定spat运算符的情况下将元素包装到最终数组中。@evianpring:我不明白你的意思。首先,变量什么都不是。他们没有课。只有对象才有类。变量