Perl中如何向父类函数转发参数?
更简洁调用Perl父类方法的方式
当然有啦!你完全不用手动重复列出所有参数,Perl提供了非常清爽的写法来解决这个问题。
针对你的代码,只需要把子类里调用SUPER::foo的部分改成下面这样:
package Subclass; use base qw(Base); sub foo{ my ($self, $first, $second, $third) = @_; #do something with $first only return SUPER::foo(@_); # 直接传递所有接收的参数 }
为什么这样可行?
当你直接使用SUPER::foo(@_)这种子例程调用语法时,不会自动把$self作为第一个参数追加进去。而你的子类foo方法接收到的@_已经包含了$self、$first、$second、$third这四个参数,正好和父类foo的参数列表完全匹配,完美实现参数的原样传递。
如果你更习惯用方法调用的语法($self->SUPER::foo(...)),也可以这么写,但相对麻烦一点:
return $self->SUPER::foo(@_[1..$#_]);
这种写法需要排除@_里的第一个元素(也就是$self),因为方法调用会自动把$self作为第一个参数传给父类方法,所以只需要传递后面的三个参数即可。不过显然第一种方式更简洁直观。
内容的提问来源于stack exchange,提问作者justHelloWorld
相关产品推荐
相关产品推荐

