raku - 布尔元素的混合语法
问题描述
如果我尝试使用布尔组件声明 Mix:
my $mix= (True => 0.3, False => 0.7).Mix;
dd $mix; # OUTPUT: «Mix $mix = ("True"=>0.3,"False"=>0.7).Mix»
他们使用Pair
语法,自动引用那些裸标识符。为了避免这种情况,您要么必须通过 Pair.new 显式定义 Pairs,要么使用完全限定名称。
my $mix= (Bool::True => 0.3, Bool::False => 0.7).Mix;
有没有其他方法可以做到这一点?也许更简单的方法?
解决方案
您可以使用任何不被视为空话的内容。
完全限定名称有效。
Bool::True => 1
他们工作的原因是他们没有::
空话。
所以你也可以前置::
。
::True => 1
您可以使用::(…)
::(True) => 1
::('True') => 1
::< True > => 1
你也可以使用()
around True
。
(True) => 1
您可以向后声明并使用.antipair
( 1 => True ).antipair
( :foo ).antipair # (Bool::True) => 'foo'
如果您不介意获取可以使用的序列.invert
,或者.antipairs
# Seq.new( Bool::True => 1 )
( 1 => True ).invert
( 1 => True ).antipairs
# Seq.new( Bool::True => 1, Bool::False => 2 )
( 1 => True, 2 => False ).invert
( 1 => True, 2 => False ).antipairs
如果True
是子例程而不是术语,则可以附加()
sub True ( --> True ){}
True() => 1
然后是使用Pair.new
.
Pair.new( True, 1 )