Raku'da `s /// '' bitiştirme

Nov 30 2020

Komut dosyası bağımlılarının raku'ya katılmaları için büyük bir satış noktasının bu tür yapılara sahip olmasının mümkün olduğunu görüyorum.

my $w = "Hello world"; $w
  ~~ s/Hello/Hola/
  ~~ s/world/mundo/
  ;

say $w; # » Hola world

Ancak böyle bir şey yazacak gibi görünmüyorum. Bildiğim kadarıyla bunu .substyöntemiyle yapmanın Strçok çirkin olacağını ve bu zincirleme s///hatta tr///temelde sedkullanıcılar için bir geçit uyuşturucusu vb. Olacağını bildiğim kadarıyla .

Sorum şu ki eğer bir şeyi kaçırıyorsam, buna uzaktan benzer bir şey raku'da bir şekilde mümkünse. Ben yeni başlayan biri değilim ve anlayamadım.

Yanıtlar

24 wamba Nov 30 2020 at 07:45

Kullanabilirsin withveyagiven

with $w {
    s/Hello/Hola/;
    s/world/mundo/;
}

andthen

$w andthen  s/Hello/Hola/ && s/world/mundo/;

ya da bu çirkin yapı

$_ := $w;
s/Hello/Hola/;
s/world/mundo/;
6 jubilatious1 Nov 30 2020 at 23:41

Şimdiye kadar bazı mükemmel yanıtlar (yorumlar dahil).

Raku'nun tahribatsız S///operatörünü kullanmak, genellikle birden fazla (ardışık) değişiklik yaparken yararlıdır. Raku REPL'de:

> my $w = "Hello world"; Hello world > given $w {S/Hello/Hola/ andthen S/world/mundo/};
Hola mundo
> say $w;
Hello world

Kodunuzdan memnun olduğunuzda, sonucu yeni bir değişkene atayabilirsiniz:

> my $a = do given $w {S/Hello/Hola/ andthen S/world/mundo/}; Hola mundo > say $a
Hola mundo

Bu fikri biraz daha ileri götürerek aşağıdaki 'baby Raku' çeviri komut dosyasını yazdım ve olarak kaydettim Bello_Gallico.p6. Koşmak eğlenceli!

my $caesar = "Gallia est omnis divisa in partes tres"; my $trans1 = do given $caesar { S/Gallia/Gaul/ andthen S/est/is/ andthen S/omnis/a_whole/ andthen S/divisa/divided/ andthen S/in/into/ andthen S/partes/parts/ andthen S/tres/three/ }; put $caesar;
put $trans1;

HTH.

https://docs.raku.org/language/regexes#S///_non-destructive_substitution