
my @seq = (rand_fa_seq() for ^10);my @qual = (rand_qual() for ^10);@seq.perl.say;@qual.perl.say;sub rand_fa_seq{ return join("",roll(20,"ACGT".comb));}sub rand_qual{ return join("","EFGHIJ".comb))} 但是,想要进一步简化它,我想也许我可以从右手语句中删除括号.当我这样做时,我只在@seq和@qual中获得了一个元素.
my @seq = rand_fa_seq() for ^10;my @qual = rand_qual() for ^10;@seq.perl.say;@qual.perl.say;sub rand_fa_seq{ return join("","EFGHIJ".comb))} 这是一个错误还是它应该表现的方式?如果没有括号,这是一个标量上下文吗? Great List Refactor会改变这种行为吗?
我见过这种行为的Perl 6解释器的版本:
moarvm:
perl6 version 2015.03-204-g8578022 built on moarvm version 2015.03-60-g36d56f7
JVM:
解决方法 语句修饰符是Perl语法的标志之一(参见Perl 5的 perldoc),它们在过渡到版本6后幸存下来.perl6 version 2015.03-305-ga95107d built on JVM
java version “1.7.0_79”
OpenJDK Runtime Environment (rhel-2.5.5.1.el7_1-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02,mixed mode)
这意味着您的陈述等同于
my @seq;for ^10 { @seq = rand_fa_seq() }my @qual;for ^10 { @qual = rand_qual() } 即你连续10次分配一个新值(只有最后一个幸存).
请注意,这也可以写得更加简洁
my @seq = rand_fa_seq() xx 10;my @qual = rand_qual() xx 10;
另请注意,默认情况下,sub中的最后一个语句提供返回值.
假设您可能需要长度不是20的序列,您可以参数化该值,最后得到以下结果:
sub rand-fa-seq($n = 20) { <A C G T>.roll($n).join }sub rand-qual($n = 20) { <E F G H I J>.roll($n).join }my @seq = rand-fa-seq() xx 10;my @qual = rand-qual() xx 10; 我用过quote words而不是拆分字符串.
总结以上是内存溢出为你收集整理的perl6 – 为什么我只从这个“for”语句中获得单个元素?全部内容,希望文章能够帮你解决perl6 – 为什么我只从这个“for”语句中获得单个元素?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)