Chinaunix首页 | 论坛 | 博客
  • 博客访问: 221361
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-03-22 12:32:45

001Moose成员方法访问控制
  1. #!usr/bin/perl

  2. package Bank;
  3. use Moose;
  4. use Attribute::Protected;

  5. sub _bar : Private {
  6.     my ( $self, $bar ) = @_;
  7.     print "Private $bar.\n";
  8. }

  9. sub _baz : Protected {
  10.     my ( $self, $baz ) = @_;
  11.     print "Protected $baz.\n";
  12. }

  13. sub test {
  14.     my $self = shift;
  15.     $self->_bar('bar'); #OK

  16.     $self->_baz('baz'); #OK

  17. }

  18. package BankChild;
  19. use Moose;
  20. extends 'Bank';

  21. sub yettest {
  22.     my $self = shift;
  23.     $self->_bar('bar'); #NG: private method

  24.     $self->_baz('baz'); #OK

  25. }

  26. package main;
  27. my $b = BankChild->new();
  28. $b->test();

  29. #$b->yettest();


  30. #$b->_bar(); #NG: private method

 
002Moo***::Declare成员方法访问控制
  1. #!usr/bin/perl

  2. use Moo***::Declare;
  3. use Attribute::Protected;

  4. class Bank {

  5.     sub _bar : Private {
  6.         my ( $self, $bar ) = @_;
  7.         print "Private $bar.\n";
  8.     }

  9.     sub _baz : Protected {
  10.         my ( $self, $baz ) = @_;
  11.         print "Protected $baz.\n";
  12.     }
  13.     method test {
  14.         $self->_bar('bar'); #OK

  15.         $self->_baz('baz'); #OK

  16.     };
  17. }

  18. class BankChild extends Bank {
  19.     method yettest {
  20.         $self->_bar('bar'); #NG: private method

  21.         $self->_baz('baz'); #OK

  22.     }
  23. }

  24. # Main program

  25. my $b = BankChild->new();
  26. $b->test();

  27. #$b->yettest();


  28. #$b->_bar(); #NG: private method

对比,perl6的成员方法控制的行为则不同
  1. class Bank {
  2.     method !_bar($bar){
  3.         say "Private $bar";
  4.     }

  5.     method baz($baz) {
  6.         say "provide $baz";
  7.     }

  8.     method test {
  9.         self!_bar('bar-test'); #OK
  10.         self.baz('baz-test'); #OK
  11.     };
  12. }

  13. class BankChild is Bank {
  14.     method yettest {
  15.         self!_bar('bar-yettest'); #OK
  16.         self.baz('baz-yettest'); #OK
  17.     }
  18. }

  19. my $b=BankChild.new();
  20. $b.test();
  21. $b.yettest();
  22. #$b._bar('bar-out'); #NG: private method
  23. $b.baz('baz-out');
阅读(1632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~