這可能不是一個好主意。圍繞調用者上下文等待發生一系列細微的陷阱。
但是 - return
實際上不是子要求 - 如果沒有return
子隱式返回最後一次計算的結果。
#!/usr/bin/env perl
use strict;
use warnings;
sub parent {
my @results = ("one", "two");
child (@results, "some_other_value");
}
sub child {
return (@_);
}
print parent();
因爲child
返回它的參數 - 爲parent
最後一行是調用child
- 然後parent
隱含返回child
結果。
雖然我會建議你不要這樣做,因爲我稱之爲不好的風格 - 未來的維護程序員不一定會知道你在做什麼。
你也許可以改善這種輕微:
return child (@results, "some_other_value");
但是記住,你可以與回報方面一些輕微的奇怪結束 - 比如:
#!/usr/bin/env perl
use strict;
use warnings;
sub parent {
my @results = ("one", "two");
return child(@results, "some_other_value");
}
sub child {
return (@_);
}
my $result = parent();
print $result;
與
sub parent2 {
my @results = ("one", "two");
return (@results, "some_other_value");
}
my $result = parent2();
print $result;
由於操作的上下文,看起來非常相似,但沒有相同的結果。
好的,令人信服的,但我有多個返回點,有些是錯誤返回,其他人返回不同的列表。除了最後一個範圍外,_explicit_ return都是必須的,不是嗎? – MeirG
是的。隱式返回僅適用於子結尾。我通常不喜歡隱性回報 - 它們是未來最終解決問題的好方法,例如,有人爲了診斷問題而增加了「打印」權利。 – Sobrique
謝謝!那麼,還有一條線不是太痛苦吧? – MeirG