タグ付けされた質問 「raku」

Rakuプログラミング言語(旧称Perl 6)に関する質問。

2
マップをシンクコンテキストに置くことはできません
シンクコンテキストでマップをスローする方法を確認しようとしています。このコードでは class Sunk { has $.titanic; method sink { say "Sinking $!titanic"; } } Sunk.new( :titanic($_) ) for 1..3; (1..3).map: { Sunk.new( :titanic($_) ) }; forループが効果的に作成されたすべてのシンク、mapしません。なぜか? ローストでのこのテスト:https : //github.com/perl6/roast/blob/b9bfe1844db25f65a4aeb351a0107f83689cb5c2/S04-statements/sink.t#L27-L32は、そのテストとして機能するはずです。そして、マップは効果的にシンクコンテキストにありますが、どのように「沈み込んで実行される」のかわかりません。それは単に実行されます。
8 raku 

3
集合に含まれるリストに関する混乱、おそらくコンテキストの問題?
Rakudoバージョン2020.01 私は使い捨てのコードをいくつか書いていて、クラスを実装する気にせず、同じようにハッシュを使用しました。リストでいくつかの驚くべき動作を見つけました。 class Q1 {} class R1 { has Str $.some-str is required; has @.some-list is required; } my $r1 = R1.new( some-str => '…', some-list => (Q1.new, Q1.new, Q1.new) ); # hash as poor man's class my $r2 = { some-str => '…', some-list => (Q1.new, Q1.new, Q1.new) }; …
8 raku 

1
タイムワーピング変数の初期化?
次の単純なforループでは、型なし変数($ n)をインクリメントして配列(@a)を作成します。 my @a = do for 1..3 { state $n; $n.^name, $n++; } say @a; 結果は「種類」が期待されます: [(Any 0) (Int 1) (Int 2)] そして、私は$ nの最初の値として「未定義」の値(すべて)を期待していたので、「種類」と言います。 それは、最初の値が生成された後(Any)、$ nをインクリメントした後($ nの最初のインクリメントの後、Intにキャストした後)、割り当てにタイムワーピングイベントがあり、変更する最初の値。したがって、最初の値は0(ゼロ)になります。 誰かがこの行動の正確なメカニズムを説明できますか?

1
forループでの.substによる文字列置換
for名前付きキャプチャを使用して、ブロックで文字列置換を行いたいのですが。出力として1、2、3の数値が得られると思っていました。しかし、それはNil最初の実行の場合であり、次に2回目と3回目の実行の場合は1と2です。.substループ構造で正しく使用するにはどうすればよいですか?ループのmap代わりにコンストラクトを使用すると、同じ動作が見られforます。固定文字列値に置き換えると、期待どおりに機能します。 for <a1 b2 c3> -> $var { say $var; say $var.subst(/.$<nr>=(\d)/, $<nr>); #.subst(/.$<nr>=(\d)/, 'X'); #OK } #`[ This is Rakudo version 2019.11 built on MoarVM version 2019.11 Output: a1 Use of Nil in string context in block at test3.pl6 line 3 b2 1 c3 2 ]

4
指定された位置で文字列を分割する
位置のリストで文字列をうまく/慣用的に分割するにはどうすればよいですか? 私が持っているもの: .say for split-at( "0019ABX26002", (3, 4, 8) ); sub split-at( $s, @positions ) { my $done = 0; gather { for @positions -> $p { take $s.substr($done, $p - $done ); $done = $p; } take $s.substr( $done, * ); } } それは合理的です。しかし、これに対する言語サポートの欠如に困惑しています。「分割」が重要な場合、なぜ「分割」もしないのですか?これがコアオペレーションになると思います。私は書くことができるはずです .say for "0019ABX26002".split( :at(3, 4, …
8 raku 

1
キャプチャを動的に作成する方法(Raku)
次の例では、配列(@a)をキャプチャーに「変換」することにより、キャプチャーを動的に作成しようとしています。 コードを考えてみましょう: sub f (|c){ say ''; say ' List : ' ~ do {c.list.gist if c.list.elems > 0}; say ' Hash : ' ~ do {c.hash.gist if c.hash.elems > 0}; say ''; } my $c1 = \(1,(2,3),4,5, :t1('test1'), 6,7, :t2('test2'), 8,9); my @a = 1,(2,3),4,5, :t1('test1'), 6,7, :t2('test2'), 8,9; …
8 dynamic  capture  raku 

1
署名のスマートマッチングの誤解
署名のスマートマッチングを読んで試してみると、奇妙なことに遭遇しました。 次のスマートマシンシグネチャペアを実行します。 my @sigs = :($a, $b), :($a, @b), :($a, %b); my @signatures_to_check = :($, $), :($, @), :($, %); my $c = 0; for @sigs -> $sig { for @signatures_to_check -> $s { $c++; if $sig ~~ $s { say " [ $c ] " ~ $sig.gist ~ ' …

1
Rakuで使用する場合、Perl 5モジュールのData :: Printerの `show_tied`オプションをオフにするにはどうすればよいですか?
CPAN PerlモジュールData :: Printer(DP)をPerlで使用しました。それは素晴らしい働きをします。 楽コードで使いたい。 この:from<Perl5>機能を使用してインポートし、それを使用してコードを実行すると、(tied to Perl6::Hash)ハッシュの表示に注釈が追加されます。1 以下のようDPのCPANのドキュメントを示して、この注釈はオプションによって制御されていますshow_tied。デフォルトのオン(に設定)ではなく、オフ(に設定0)にしたい。Perlでこれを行う方法は次のとおりです。1 use Data::Printer show_tied => 0; しかし、私が楽でこれを試したとき: use Data::Printer:from<Perl5> show_tied => 0; 私は得ます: 「Data :: Printer」からのインポート中にエラーが発生しました:そのようなタグ「show_tied」はありません show_tiedRakuでDPを使用する場合、どのようにオフにしますか? 脚注 1おそらくこれは、Inline :: Perl5(この:from<Perl5>機能を実装)がスムーズなPerl / Raku相互運用を可能にするために何かをしているためです。
8 perl  import  module  tags  raku 


1
ネイティブ属性をパラメーターのバインドターゲットとして使用できますか?
6.d(現在のバージョン)のチェックリストによると、それらは可能です。 しかしながら、 class Foo { has num $.numillo; submethod BUILD( :$numillo = 3.5 ) {} }; my $foo = Foo.new; say $foo.raku; # OUTPUT: «Foo.new(numillo => 0e0)␤» 属性がバインド可能ではないか、少なくとも値が割り当てられていません。ここで何か不足していますか?
8 syntax  raku 

2
多次元配列の複製
多次元配列@aを配列に複製したい@b。 私は最も直感的な方法で進み、次のことを思いつきました: my @a = [0, 0, 0], [0, 0, 0], [0, 0, 0]; my @b = @a.clone; @a[0][1] = 1; @b[1][0] = 1; say '@a : ' ~ @a.gist; say '@b : ' ~ @b.gist; そして、プリントアウトは: @a : [[0 1 0] [1 0 0] [0 0 0]] @b : …
8 arrays  clone  raku 

2
楽演算子のオーバーロード
次のコードを使用します。 use v6d; # sub circumfix:<α ω>( @a ) { # @a[0] >= @a[1] & @a[0] <= @a[2]; # }; sub circumfix:<α ω>( $a, $b, $c ) { $a >= $b & $a <= $c; }; if (α <5 0 10> ω) { say 'Truthy'; } else { say 'Falsey'; …

2
Rakuハッシュ内の配列を反復するにはどうすればよいですか?
これは簡単な質問のようですが、Perl6 / Rakuは期待どおりに動作していません。ハッシュ内の配列への参照を作成しようとしていますが、期待どおりの動作が得られません。Perl5では、答えは参照によって配列にアクセスすることを含みますが、Perl6 / Rakuに対応する構文は見当たりません。 my $jsonstr = q:to/END/; { "arr" : [ "alpha","beta","delta","gamma" ] } END my %json = from-json $jsonstr; my @arr = %json{'arr'}; say "Arr length is " ~ @arr.elems; # Expect 4, get 1 say "Orig length is " ~ %json{'arr'}.elems; # Get expected value of …
8 arrays  json  hash  raku 



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.