红宝石中的运算符*和(*)是什么意思?
发布时间:2020-12-16 20:12:56 所属栏目:百科 来源:网络整理
导读:我刚刚介绍自己的 Ruby splat oprator.我玩了很多的方式.但下面的实验不知何故让我 考虑两次:) langs = ["java","csharp","ruby","haskell" ]# = ["java","haskell"] l1,*,l2 = *langs# = ["java","haskell"] l1# = "java" l2# = "haskell" l1,l2 = *langsSy
我刚刚介绍自己的
Ruby splat oprator.我玩了很多的方式.但下面的实验不知何故让我
考虑两次:) langs = ["java","csharp","ruby","haskell" ] # => ["java","haskell"] l1,*,l2 = *langs # => ["java","haskell"] l1 # => "java" l2 # => "haskell" l1,l2 = *langs SyntaxError: (irb):27: syntax error,unexpected tSTAR l1,l2 = *langs ^ from /usr/bin/irb:12:in `<main>' 是的,错误是显而易见的,因为我在同一个参数列表中使用了多个1 *(splat)运算符. 现在我试图玩它. l1,(*),"haskell"] 啊!这里工作.但是不明白为什么呢 l1 # => "java" l2 # => "haskell" l1,"haskell"] l1 # => "java" l2 # => "ruby" 从上面的例子看,它正在跳过数组元素. 问题是: (a)运算符(*)被调用? 解决方法
这是由于Matz所解释的
how parentheses work with parallel assignment.
例如: a,b,c = *[1,2,3] a => 1 b => 2 c => 3 不同于: a,(b,c) = *[1,3] a => 1 b => 2 c => nil 基本上,圆括号表示:将此索引处的右手元素分配给括号中的变量.所以2被分配给b,索引1上没有任何内容分配给c.类似地,(*)将仅使用给定索引处的元素并进行分发. # the * is interpreted to mean 'take all remaining elements' a,* = 1,3,4 # the * is interpreted to mean 'take all remaining elements except # the last element' a,c = 1,4 # incorrect syntax,can't splat more than once on all remaining # elements a,4 # the * is interpreted to mean 'take all elements at index 1' a,4 # the *'s are interpreted to mean 'take all elements at index 1,# then again at index 2' a,4 通常,*运算符与* foo的变量结合使用 – 但是如果不是,它将保持其位置,并将元素分配视为变量(基本上是丢弃它们) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |