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

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


1
ネストされたデータ構造を構築する際の困難
APIのJSONメッセージを作成しようとしているときに、簡単だと思った何かを実行するのに苦労しました。次のようなメッセージを作成する必要がありました。 { "list": [ { "foo": 1, "bar": 2 } ] } しかし、私の最初の試みはうまくいきませんでした: say to-json { foo => [ { a => 1, b => 2 } ] }; # {"foo":[{"a":1},{"b":2}]} 物事を単純化しようとすると、さらに混乱しました: say { foo => [ { a => 1 } ] }; # {foo => [a => 1]} …

2
私はNilで任意のメソッドを呼び出すことができ、これは間違っていると感じます
最近スクリプトのデバッグにかなりの時間を費やしましたが、ようやく問題が見つかったのは、次のようなコードが原因でした。 class Foo { has $.bar; method () { # do stuff $!.bar; } } これは、問題はそれにあったが、$!.barどちらかとなっているべき、$!barまたは$.bar。わかった しかし、なぜこれが死なないのですか? より詳細に本を見てみると、それはここでの問題のように見える私は(存在しない)メソッドを呼び出ししようとしているということであるbar上$!、この時点である、Nil任意のエラーがされていないために。 そして、私は実際に私が望む任意のメソッドを呼び出すことができるように見えNil、それらはすべてNil、Nil.this-is-a-fake-methodやのようなものを含め、すべて黙って戻りNil.reverse-entropy(123)ます。 これは機能ですか?もしそうなら、理論的根拠は何ですか?
14 raku 

2
Perl6シーケンスに「各」メソッドがないのはなぜですか?
時々、Perl 6 REPLで次のように一連のメソッド呼び出しを記述し始めます。 ".".IO.dir.grep(...).map(...). ...そして、私は最終的なリストでやりたいことは、すべての要素を独自の行に出力することだと気づきました。シーケンスにはメソッドのようなものがありeach、チェーンを.each(*.say)で終了できると思いますが、そのようなメソッドは見つかりません。代わりに、行の先頭に戻って先頭に追加する必要があり.say forます。それが私の考えの流れを壊してしまうような気がします。 それはマイナーな煩わしさですが、私がいくつかの簡単な代替案を見逃しているのではないかと思うほどの明白な省略として私を襲います。私が考えることができるのは».sayand だけです.join("\n").sayが、前者は順不同で要素を操作でき(私が正しく理解している場合)、後者は入力リストによっては問題になるほど大きくなる可能性がある単一の文字列を構築します。
14 raku 

3
TSVテキストを解析するためのRaku文法を定義するにはどうすればよいですか?
TSVデータがあります ID Name Email 1 test test@email.com 321 stan stan@nowhere.net これを解析してハッシュのリストにしたい @entities[0]<Name> eq "test"; @entities[1]<Email> eq "stan@nowhere.net"; 改行メタ文字を使用してヘッダー行と値行を区切るのに問題があります。私の文法定義: use v6; grammar Parser { token TOP { <headerRow><valueRow>+ } token headerRow { [\s*<header>]+\n } token header { \S+ } token valueRow { [\s*<value>]+\n? } token value { \S+ } } my …
13 csv  grammar  raku 

3
らくで実装する方法
Perlでは、を使用して、クラス内の他のメソッドをラップMooするaroundサブルーチンを実装できます。 around INSERT => sub { my $orig = shift; my $self = shift; print "Before the original sub\n"; my $rv = $orig->($self, @_); print "After the original sub\n"; }; この動作をRakuで、できればaを使用してどのように実装できroleますか?
13 oop  raku 

1
Rakuで二重合計シーケンスを表現する
Perl 6で二重変数二重合計シーケンスを表現する方法は? 二重変数二重合計シーケンスの例については、これを参照してください それは、現状のまま、つまり、数学的に二重合計を単一の合計に削減せずに表現する必要があります。ありがとうございました。
13 math  raku 


1
Perl 6のreduce関数とreduceメタオペレーターは異なる結果を出します
my @s=<1 2 3 2 3 4>; say reduce {$^a < $^b}, @s; say [<] @s; # -------- # True # False 私の質問は2つあります。第1に、なぜ還元メタ<オペレーターがオペレーターを異なる方法で処理するのですか?削減metaopは、trueからfalseへの最初の変更時にその変更を保持する変数を使用していると推定されているようです。 say [\<] @s; # ---------- # (True True True False False False) 次に、reduce関数内でもこれを使用します。つまり、reduce関数の波括弧内にコードを導入して、reductionメタ演算子と同じ結果が得られるようにします。どうすればできますか?ありがとうございました。
12 raku  reduction 

2
プッシュ後にスカラー値が影響を受けるかどうか…(楽)
プッシュされたScalarコンテナーによって保持されている値がプッシュ後に影響を受ける時期と理由を理解するのが困難です。2つの様式化された例で、より複雑な状況で遭遇した問題を説明しようと思います。 *例1 *最初の例では、スカラー$iがの@b一部として配列にプッシュされListます。プッシュ後、スカラーが保持する値は、$i++命令を使用したforループの後の反復で明示的に更新されます。これらの更新は、配列の値に影響を及ぼします。for @bループの最後で、@b[0;0]はに等しく3、もはやにはなりません2。 my @b; my $i=0; for 1..3 -> $x { $i++; say 'Loose var $i: ', $i.VAR.WHICH, " ", $i.VAR.WHERE; if $x == 2 { @b.push(($i,1)); say 'Pushed $i : ', @b[0;0].VAR.WHICH, " ", @b[0;0].VAR.WHERE; } } say "Post for-loop"; say "Array : ", @b; say 'Pushed …

1
正規表現の$ /と$¢の違いは何ですか?
タイトルが示すように、違いは何である$/とは$¢?それらは常に同じ値を持っているように見えます: my $text = "Hello world"; $text ~~ /(\w+) { say $/.raku } (\w+)/; $text ~~ /(\w+) { say $¢.raku } (\w+)/; どちらも同じ値のMatchオブジェクトになります。どちらを使用する場合のロジックは何ですか?
11 regex  raku 

1
rakuのモジュールでPreludeモジュールのようにHaskellを使用する
私はいくつかのパーツを含む描画パッケージを書いており、演算子とデータ型が散在しています。ただし、ユーザーに毎回対応するモジュールを追加してほしくありません。これは非常に煩雑になるためです。たとえばPoint、次のような異なるパスにクラス、Monoidロール、Styleクラスがあるとします。 unit module Package::Data::Monoid; # $?FILE = lib/Package/Data/Monoid.pm6 role Monoid {...} unit module Package::Data::Point; # $?FILE = lib/Package/Data/Point.pm6 class Point {...} unit module Package::Data::Style; # $?FILE = lib/Package/Data/Style.pm6 class Style {...} 私はそのよう なスクリプトを書くことができるという効果でhaskell同様のプレリュードを持ちたいですlib/Package/Prelude.pm6 use Package::Prelude; # I can use Point right away, Style etc... する代わりに use Package::Data::Style; use Package::Data::Point; use …
11 haskell  raku 

2
RakuでのPerlの<>の代替?
ここで、Raku(neéPerl 6)の周りで私の方法を学びます。しかし、私&lt;&gt;はPerl 5 の魔法をひどく欠けています。 my $x = &lt;&gt;; print $x; while(&lt;&gt;) { print join(':', split); } (次の入力行をに読み込み$x、残りをループします。入力は、入力として指定されたファイルから、またはファイルが指定されていない場合は標準入力からです)。"Perl 5 to 6"チュートリアル/移行ガイド/ ... slurpファイル全体またはopen個々のファイルを名前で話すことについて話します。「名前の付いたファイルから順番に入力を取る」という魔法はありません。 魔法を取り戻したい!
11 migration  raku 

1
Raku Croアプリを永続的なサービスとして実行する
フロントエンドウェブサーバーの背後にあるサービスとしてperl6 / raku Croアプリを実行したいのですが。 実行cro runすると、segfaultsと再起動後の再起動は処理されません。 以前はperl5でFastCGIを使用していましたが、Cro::HTTP::Server's Cro::HTTP::Server.new().start()イディオムはFastCGI :: Nativeのwhile $fcgi.accept() {}例と互換性がないように見えます。 service.p6生成されcro stubていないSIGINT私は、この中でポイントにそれに十分であるかどうかわからないんですが、ハンドラをsystemctlサービス、すなわち [Service] ExecStart = /path/to/service.p6 現在、人々はどのようにCroアプリをホストしていますか?
11 raku  cro 

2
割り当て演算子を使用する場合、「メソッド 'ASSIGN-KEY'の呼び出し元はオブジェクトインスタンスでなければなりません」
入力されたキーによるハッシュ… use v6; class Foo {} my Hash[Foo, Foo] $MAP; my $f1 = Foo.new; my $f2 = Foo.new; $MAP{$f1} = $f2; エラーを生成します: メソッド 'ASSIGN-KEY'の呼び出し元は、タイプ 'Hash [Foo、Foo]'のタイプオブジェクトではなく、タイプ 'Hash [Foo、Foo]'のオブジェクトインスタンスでなければなりません。「.new」を忘れましたか? 私はそれが誤解を招くと思います。実際のエラーは何ですか?代わりに何を書かなければなりませんか? 私はすでに%ハッシュ変数のシギルを試しましたが、それもうまくいきません。
10 raku 

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