Raku'da `s /// '' bitiştirme
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
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/;
Ş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