คำถามติดแท็ก raku

สำหรับคำถามเกี่ยวกับภาษาการเขียนโปรแกรม Raku (เดิมชื่อ Perl 6)


2
ฉันสามารถเรียกวิธีการใด ๆ เกี่ยวกับศูนย์และสิ่งนี้รู้สึกผิด
ฉันใช้เวลามากในการดีบักสคริปต์เมื่อเร็ว ๆ นี้และเมื่อฉันพบปัญหาในที่สุดมันเป็นเพราะโค้ดที่มีลักษณะดังนี้: class Foo { has $.bar; method () { # do stuff $!.bar; } } มันกลับกลายเป็นปัญหาอยู่กับที่$!.barซึ่งควรจะได้รับอย่างใดอย่างหนึ่งหรือ$!bar $.barฉันได้รับสิ่งนี้ แต่ทำไมไม่ตาย ? กำลังมองหาที่นี้ในรายละเอียดมากขึ้นก็ดูเหมือนว่าปัญหาที่นี่เป็นที่ที่ฉันพยายามที่จะเรียก (ที่ไม่มีอยู่จริง) วิธีการbarใน$!ซึ่งในจุดนี้เป็นNilเพราะมียังไม่ได้รับข้อผิดพลาดใด ๆ และดูเหมือนว่าที่จริงผมสามารถเรียกวิธีการใด ๆ ที่ฉันต้องการบนNilและพวกเขาทั้งหมดกลับมาเงียบ ๆNilรวมทั้งสิ่งที่ชอบและNil.this-is-a-fake-methodNil.reverse-entropy(123) นี่เป็นคุณสมบัติหรือไม่? ถ้าเป็นเช่นนั้นมีเหตุผลอะไร?
14 raku 

1
ความยากเมื่อสร้างโครงสร้างข้อมูลแบบซ้อน
ในขณะที่พยายามสร้างข้อความ JSON สำหรับ API ฉันพบว่าตัวเองกำลังพยายามทำสิ่งที่ฉันคิดว่าจะง่าย ฉันต้องการสร้างข้อความดังต่อไปนี้: { "list": [ { "foo": 1, "bar": 2 } ] } อย่างไรก็ตามความพยายามครั้งแรกของฉันไม่ทำงาน: say to-json { foo => [ { a => 1, b => 2 } ] }; # {"foo":[{"a":1},{"b":2}]} การพยายามลดความซับซ้อนของสิ่งต่าง ๆ ทำให้ฉันสับสนมากขึ้น: say { foo => [ { a => 1 } ] …

2
ทำไมไม่มีวิธี“ แต่ละ” ในลำดับ Perl6
บางครั้งฉันจะเริ่มเขียนการเรียกใช้เมธอดที่ Perl 6 REPL เช่น: ".".IO.dir.grep(...).map(...). ... และจากนั้นฉันก็ตระหนักว่าสิ่งที่ฉันต้องการจะทำกับรายการสุดท้ายคือการพิมพ์องค์ประกอบทุกอย่างในบรรทัดของตัวเอง ฉันคาดหวังว่าลำดับจะมีบางอย่างเช่นeachวิธีการเพื่อให้ฉันสามารถจบห่วงโซ่ด้วย.each(*.say)แต่ไม่มีวิธีเช่นที่ฉันสามารถหา .say forแต่ผมต้องกลับไปที่จุดเริ่มต้นของบรรทัดและย่อหน้าที่ มันรู้สึกเหมือนมันทำให้ความคิดของฉันแตกสลาย มันเป็นเรื่องน่ารำคาญเล็กน้อย แต่มันก็ทำให้ฉันรู้สึกเหมือนว่าฉันไม่สนใจอะไรเลย สิ่งเดียวที่ฉันนึกได้คือ».sayและ.join("\n").sayแต่ก่อนหน้านี้สามารถใช้งานองค์ประกอบต่าง ๆ ตามลำดับได้ (ถ้าฉันเข้าใจถูกต้อง) และโครงสร้างหลังจะสร้างสตริงเดี่ยวซึ่งอาจมีปัญหาใหญ่ขึ้นอยู่กับรายการอินพุต
14 raku 

3
ฉันจะกำหนดไวยากรณ์ Raku เพื่อแยกวิเคราะห์ข้อความ TSV ได้อย่างไร
ฉันมีข้อมูล 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+ } …
13 csv  grammar  raku 

3
วิธีการนำไปใช้ใน Raku
ใน Perl โดยใช้Mooคุณสามารถใช้งานaroundsubs ซึ่งจะล้อมรอบวิธีอื่น ๆ ในชั้นเรียน 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โดยเฉพาะอย่างยิ่งการใช้role?
13 oop  raku 

1
แสดงลำดับการรวมสองครั้งใน Raku
วิธีการแสดงลำดับคู่บวกคู่ตัวแปรใน Perl 6? สำหรับตัวอย่างของตัวแปร double summation doubleดูได้ มันจะต้องแสดงตามที่เป็นอยู่คือไม่มีการลดลงในการรวมคู่เดียวทางคณิตศาสตร์ ขอบคุณ.
13 math  raku 


1
Perl 6 ลดฟังก์ชั่นและ metaoperator ลดให้ผลลัพธ์ที่แตกต่าง
my @s=<1 2 3 2 3 4>; say reduce {$^a < $^b}, @s; say [<] @s; # -------- # True # False คำถามของฉันคือสองเท่า: ประการแรกทำไม metaoperator ลดประมวลผล<ผู้ประกอบการแตกต่างกันอย่างไร ดูเหมือนว่า metaop ที่ลดลงนั้นประมาณว่าใช้ตัวแปรซึ่งในการเปลี่ยนแปลงครั้งแรกของจริงเป็นเท็จจะคงไว้ซึ่งการเปลี่ยนแปลงนั้นเพราะ: say [\<] @s; # ---------- # (True True True False False False) ประการที่สองฉันต้องการใช้สิ่งนี้ภายในฟังก์ชั่นการลดเช่นแนะนำรหัสบางอย่างภายในวงเล็บปีกกาของฟังก์ชั่นการลดขนาดเพื่อให้ผลลัพธ์เช่นเดียวกับตัวดำเนินการลดเมตาดาต้า ฉันจะทำมันได้อย่างไร ขอบคุณ.
12 raku  reduction 

2
ค่าสเกลาร์ได้รับผลกระทบหลังจากกดหรือไม่… (Raku)
ฉันมีปัญหาในการทำความเข้าใจว่าเมื่อใดและเพราะเหตุใดค่าที่จัดขึ้นโดยScalarคอนเทนเนอร์ที่ถูกพุชได้รับผลกระทบหลังจากการพุช ฉันจะพยายามอธิบายปัญหาที่ฉันพบในบริบทที่ซับซ้อนมากขึ้นในตัวอย่างสองตัวอย่าง * * * * * * * * ตัวอย่างที่ 1ในตัวอย่างแรกเป็นสเกลา$iถูกผลักลงบนอาร์เรย์เป็นส่วนหนึ่งของ@b Listหลังจากการพุชค่าที่เก็บโดยสเกลาร์จะได้รับการอัพเดตอย่างชัดเจนในการวนซ้ำในภายหลังของ for for loop โดยใช้$i++คำสั่ง การปรับปรุงเหล่านี้มีผลกระทบต่อค่าในอาร์เรย์@b: ในตอนท้ายของสำหรับวงที่@b[0;0]มีค่าเท่ากับและไม่มีอีกต่อไปเพื่อ32 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, …

1
อะไรคือความแตกต่างระหว่าง $ / และ $ ¢ใน regex?
ตามที่ชื่อระบุความแตกต่างระหว่าง$/และ$¢คืออะไร ดูเหมือนว่าจะมีค่าเท่ากันเสมอ: my $text = "Hello world"; $text ~~ /(\w+) { say $/.raku } (\w+)/; $text ~~ /(\w+) { say $¢.raku } (\w+)/; ทั้งสองผลลัพธ์ในการจับคู่วัตถุด้วยค่าเดียวกัน ตรรกะในการใช้อย่างใดอย่างหนึ่งมากกว่าอื่น ๆ คืออะไร?
11 regex  raku 

1
ใช้ Haskell เหมือนโมดูลโหมโรงในโมดูลใน raku
ฉันกำลังเขียนแพคเกจการวาดภาพที่มีบางส่วนและฉันมีโอเปอเรเตอร์และชนิดข้อมูลกระจัดกระจายไปทั่ว อย่างไรก็ตามฉันไม่ต้องการให้ผู้ใช้เพิ่มโมดูลที่เกี่ยวข้องทุกครั้งเนื่องจากมันจะค่อนข้างยุ่งเช่นฉันมี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; …
11 haskell  raku 

2
ทางเลือกของ Perl ใน <> ใน Raku?
ที่นี่เรียนรู้วิธีของฉันไปรอบ ๆ Raku (neé Perl 6) ดีมาก ๆ แต่ฉันคิดถึงเวทมนตร์&lt;&gt;จาก Perl 5 อย่างมากซึ่งคุณสามารถทำได้เพียง: my $x = &lt;&gt;; print $x; while(&lt;&gt;) { print join(':', split); } (อ่านบรรทัดอินพุตถัดไปเข้าไป$xวนรอบส่วนที่เหลืออินพุตมาจากไฟล์ที่มีชื่อเป็นอินพุตหรืออินพุตมาตรฐานหากไม่มีไฟล์ที่กำหนด) บทแนะนำ / บทแนะนำในการย้ายข้อมูล "Perl 5 ถึง 6" / ... เพียงแค่พูดคุยเกี่ยวกับslurpไฟล์ทั้งหมดหรือส่งopenแต่ละไฟล์ตามชื่อ ไม่มีเวทมนต์ "รับอินพุตจากไฟล์ที่มีชื่อตามลำดับ" ฉันหาได้ ฉันต้องการเวทย์มนตร์คืน!
11 migration  raku 

1
เรียกใช้แอป Raku Cro เป็นบริการแบบถาวร
ฉันต้องการเรียกใช้แอป Cro ที่ perl6 / raku เป็นบริการหลังเว็บเซิร์ฟเวอร์ส่วนหน้า เพียงแค่เรียกใช้cro runจะไม่จัดการกับการเริ่มต้นใหม่หลังจาก segfaults และเริ่มต้นใหม่ ก่อนหน้านี้กับ Perl5 ฉัน FastCGI มือสอง - แต่Cro::HTTP::Server's Cro::HTTP::Server.new().start()สำนวนดูไม่เข้ากันได้กับ FastCGI :: พื้นเมืองของwhile $fcgi.accept() {}ตัวอย่าง service.p6สร้างขึ้นโดยcro stubจะมีSIGINTการจัดการอย่างไรฉันไม่แน่ใจว่าเรื่องนี้จะเพียงพอที่จะชี้ไปไว้ในsystemctlการให้บริการเช่น [Service] ExecStart = /path/to/service.p6 ขณะนี้ผู้คนเป็นเจ้าภาพแอพ Cro?
11 raku  cro 

2
“ Invocant ของเมธอด 'ASSIGN-KEY' ต้องเป็นอินสแตนซ์ของวัตถุ” เมื่อใช้โอเปอเรเตอร์การมอบหมาย
แฮชด้วยแป้นพิมพ์ ... use v6; class Foo {} my Hash[Foo, Foo] $MAP; my $f1 = Foo.new; my $f2 = Foo.new; $MAP{$f1} = $f2; สร้างข้อผิดพลาด: Invocant ของเมธอด 'ASSIGN-KEY' ต้องเป็นอินสแตนซ์ของวัตถุประเภท 'Hash [Foo, Foo]' ไม่ใช่วัตถุประเภทที่มีประเภท 'Hash [Foo, Foo]' คุณลืม '.new' หรือไม่? ฉันคิดว่ามันทำให้เข้าใจผิด ข้อผิดพลาดจริงคืออะไรและฉันต้องเขียนอะไรแทน ฉันลองใช้%sigil สำหรับตัวแปร hash แล้วซึ่งไม่ได้ผลเช่นกัน
10 raku 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.