应用于范围表达式时如何理解 splat 运算符?
How is the splat operator understood when applied to a range expression?
我发现表达式 [*1..4]
returns 和我做 (1..4).to_a
一样,但我不明白这里的语法。我的理解是 *
是 - 在这种情况下是一元运算符 - 是 splat 运算符 ,并且在它的右边,我们有一个范围。但是,如果只写表达式*1..4
,这是语法错误,*(1..4)
也是语法错误。为什么第一个 [*1..4]
起作用以及如何详细理解它?
splat *
将对象转换为 值列表(通常是 参数列表) =14=] 方法,所以 *1..4
等同于:
1, 2, 3, 4
以上内容本身无效。但是用方括号括起来,[*1..4]
变成:
[1, 2, 3, 4]
哪个有效。
你也可以写成 a = *1..4
相当于:
a = 1, 2, 3, 4
#=> [1, 2, 3, 4]
此处,由于 Ruby 的 implicit array assignment,值列表变为数组。
我发现表达式 [*1..4]
returns 和我做 (1..4).to_a
一样,但我不明白这里的语法。我的理解是 *
是 - 在这种情况下是一元运算符 - 是 splat 运算符 ,并且在它的右边,我们有一个范围。但是,如果只写表达式*1..4
,这是语法错误,*(1..4)
也是语法错误。为什么第一个 [*1..4]
起作用以及如何详细理解它?
splat *
将对象转换为 值列表(通常是 参数列表) =14=] 方法,所以 *1..4
等同于:
1, 2, 3, 4
以上内容本身无效。但是用方括号括起来,[*1..4]
变成:
[1, 2, 3, 4]
哪个有效。
你也可以写成 a = *1..4
相当于:
a = 1, 2, 3, 4
#=> [1, 2, 3, 4]
此处,由于 Ruby 的 implicit array assignment,值列表变为数组。