Синтаксис Mix для логических элементов - PullRequest
0 голосов
/ 31 января 2019

Если я пытаюсь объявить 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 голосов
/ 31 января 2019

Вы можете использовать все, что не воспринимается как голое слово.

Полностью квалифицированные имена работают.

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 )
0 голосов
/ 31 января 2019

Использование паренов, как в (True) => 0.3, или псевдопакет null, как в ::True => 0.3, - другой вариант.

...