كيف يمكنني تمرير العناصر في مرجع صفيف بيرل كوسائط منفصلة إلى روتين فرعي؟
-
21-09-2019 - |
سؤال
لدي قائمة تحتوي على حجج أريد نقلها إلى وظيفة. كيف أسمي هذه الوظيفة؟
على سبيل المثال ، تخيل أن لدي هذه الوظيفة:
sub foo {
my ($arg0, $arg1, $arg2) = @_;
print "$arg0 $arg1 $arg2\n";
}
ودعنا نقول لدي:
my $args = [ "la", "di", "da" ];
كيف أتصل foo
دون كتابة foo($$args[0], $$args[1], $$args[2])
?
المحلول
هذا يجب أن يفعل ذلك:
foo(@$args)
هذا ليس في الواقع apply
وظيفة. هذا بناء الجملة مجرد إزالة مرجع الصفيف مرة أخرى إلى صفيف عادي. رجل بيرلف يخبرك بالمزيد عن الأوقات.
نصائح أخرى
أنت مرجع صفيف عن طريق الالتصاق @
امامها.
foo( @$args );
أو إذا كنت تريد أن تكون أكثر وضوحًا:
foo( @{ $args } );
جرب هذا:
foo(@$args);
foo(@$args);
أو ، إذا كان لديك إشارة إلى foo
:
my $func = \&foo;
...
$func->(@$args);
انه سهل. foo ({{$ args})
لا تنتمي إلى StackOverflow