布尔元素的混合语法

时间:2019-01-31 19:00:27

标签: perl6

如果我尝试声明具有布尔分量的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显式定义对,要么使用完全限定的名称。

my $mix= (Bool::True => 0.3, Bool::False => 0.7).Mix;

还有其他方法吗?也许更简单的方法?

2 个答案:

答案 0 :(得分:7)

您可以使用任何被视为裸词的东西。

完全合格的名称有效。

Bool::True => 1

它们起作用的原因是裸词,其中没有::
因此,您也可以在::之前加上

::True => 1

您可以使用::(…)

::(True) => 1

::('True') => 1
::< True > => 1

您还可以在()周围使用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 )

答案 1 :(得分:5)

使用(True) => 0.3中的parens或::True => 0.3中的空伪包将是另一种选择。