我知道Swift命名了元组:
let twostraws = (name: "twostraws", password: "fr0st1es")
Run Code Online (Sandbox Code Playgroud)
所以我可以说:
print(twostraws.name) # twostraws
Run Code Online (Sandbox Code Playgroud)
但是在Perl 6中我会说:
my $list = (twostraws, fr0st1es);
say $list[0];
Run Code Online (Sandbox Code Playgroud)
这不像Swift那么棒,所以我想知道Perl 6中是否有命名元组?
Bra*_*ert 10
有各种方法可以获得类似的东西.
简单哈希(推荐)
my \twostraws = %( 'name' => 'twostraws', 'password' => 'fr0st1es' );
print twostraws<name>; # twostraws{ qw'name' }
Run Code Online (Sandbox Code Playgroud)列表中混合了两种方法
my \twostraws = ( 'twostraws', 'fr0st1es' ) but role {
method name () { self[0] }
method password () { self[1] }
}
put twostraws.name; # `put` is like `print` except it adds a newline
Run Code Online (Sandbox Code Playgroud)匿名课
my \twostraws = class :: {
has ($.name, $.password)
}.new( :name('twostraws'), :password('fr0st1es') )
say twostraws.name; # `say` is like `put` but calls the `.gist` method
Run Code Online (Sandbox Code Playgroud)可能还有很多我还没有想到的.真正的问题是如何在其余代码中使用它.
小智 5
枚举可以具有非Int的值类型.您将它们声明为Pairs列表.
enum Twostraws (name => "twostraws", password => "fr0st1es");
say name; # OUTPUT«twostraws?»
say password; # OUTPUT«fr0st1es?»
say name ~~ Twostraws, password ~~ Twostraws; # OUTPUT«TrueTrue?»
say name.key, ' ', name.value; # OUTPUT«name twostraws?»
Run Code Online (Sandbox Code Playgroud)
声明的类型enum可以像任何其他类型一样使用.
sub picky(Twostraws $p){ dd $p };
picky(password); # OUTPUT«Twostraws::password?»
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅https://github.com/perl6/roast/blob/master/S12-enums/non-int.t