代码之家  ›  专栏  ›  技术社区  ›  jjmerelo

布尔元素的混合语法

  •  5
  • jjmerelo  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  7
  •   Brad Gilbert    6 年前

    你可以使用任何不被视为简单的词。

    完全限定名起作用。

    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
    

    符合事实的 是一个子程序而不是一个术语,您可以附加 ()

    sub True ( --> True ){}
    
    True() => 1
    

    然后是使用 Pair.new .

    Pair.new( True, 1 )
    
        2
  •  5
  •   Christoph    6 年前

    使用parens作为 (True) => 0.3 或如中所示的空伪包 ::True => 0.3

    推荐文章