Perl - 链接方法调用

abr*_*bra 1 methods perl method-chaining

我有一个类,并希望按严格的顺序链接其方法调用,但无法弄清楚如何做到这一点.

# Mail.pm

package Mail;

sub new { ... }
sub inbox { ... }
sub folder { ... }
sub count { ... }

1;
Run Code Online (Sandbox Code Playgroud)

然后 ...

use Mail;

my $mail = Mail->new;

# ok
$mail->inbox->count;
$mail->folder('Spam')->count;

# prevent calling inbox() after folder() or vice versa
$mail->inbox->folder('Spam')->count;
$mail->folder('Spam')->inbox->count;
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 7

显然,folder应该返回一个My::Mail::Folder具有count而没有inbox方法inboxMy::Mail::Box对象,并且应该返回一个具有count方法但没有folder方法的对象.

另一方面,我不确定为什么会有$mail->inbox->folder('Spam')->count;问题.

另一方面,为什么你被方法链接吸引?

此外,请记住,Mail::命名空间下有一大堆CPAN模块,包括Mail :: Box,从长远来看,它可以帮助您理解将命令置于不太可能被CP践踏的命名空间中您可能需要的模块.

  • @abra:*"另一方面,为什么你被方法链接吸引?"*我同意.这是一种非常类似Ruby的方法,并没有很好地揭示代码中发生了什么.底线是每个方法必须返回一个提供链中下一个方法的对象.对于给定的`nwe`,它将返回一个``Mail`对象,该对象具有`inbox`方法(但请将其称为'My :: Mail`或类似Sinan所说的,以免与现有类冲突) .但是`inbox`和`fol​​der`必须返回除了另一个`Mail`对象之外的东西,因为它们代表不同的东西. (2认同)