Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么我可以执行a=*ari.flatte,而不是简单地执行*ari.flatte?_Ruby - Fatal编程技术网

Ruby 为什么我可以执行a=*ari.flatte,而不是简单地执行*ari.flatte?

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

在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的各个元素(它返回的对象到底是什么?),我可以将其分配给某个对象: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:我不明白你的意思。首先,变量什么都不是。他们没有课。只有对象才有类。变量