Fast.pm
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:2k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. package Class::Accessor::Fast;
  2. use base 'Class::Accessor';
  3. use strict;
  4. $Class::Accessor::Fast::VERSION = '0.33';
  5. =head1 NAME
  6. Class::Accessor::Fast - Faster, but less expandable, accessors
  7. =head1 SYNOPSIS
  8.   package Foo;
  9.   use base qw(Class::Accessor::Fast);
  10.   # The rest is the same as Class::Accessor but without set() and get().
  11. =head1 DESCRIPTION
  12. This is a faster but less expandable version of Class::Accessor.
  13. Class::Accessor's generated accessors require two method calls to accompish
  14. their task (one for the accessor, another for get() or set()).
  15. Class::Accessor::Fast eliminates calling set()/get() and does the access itself,
  16. resulting in a somewhat faster accessor.
  17. The downside is that you can't easily alter the behavior of your
  18. accessors, nor can your subclasses.  Of course, should you need this
  19. later, you can always swap out Class::Accessor::Fast for
  20. Class::Accessor.
  21. Read the documentation for Class::Accessor for more info.
  22. =cut
  23. sub make_accessor {
  24.     my($class, $field) = @_;
  25.     return sub {
  26.         return $_[0]->{$field} if @_ == 1;
  27.         return $_[0]->{$field} = $_[1] if @_ == 2;
  28.         return (shift)->{$field} = @_;
  29.     };
  30. }
  31. sub make_ro_accessor {
  32.     my($class, $field) = @_;
  33.     return sub {
  34.         return $_[0]->{$field} if @_ == 1;
  35.         my $caller = caller;
  36.         $_[0]->_croak("'$caller' cannot alter the value of '$field' on objects of class '$class'");
  37.     };
  38. }
  39. sub make_wo_accessor {
  40.     my($class, $field) = @_;
  41.     return sub {
  42.         if (@_ == 1) {
  43.             my $caller = caller;
  44.             $_[0]->_croak("'$caller' cannot access the value of '$field' on objects of class '$class'");
  45.         }
  46.         else {
  47.             return $_[0]->{$field} = $_[1] if @_ == 2;
  48.             return (shift)->{$field} = @_;
  49.         }
  50.     };
  51. }
  52. =head1 EFFICIENCY
  53. L<Class::Accessor/EFFICIENCY> for an efficiency comparison.
  54. =head1 AUTHORS
  55. Copyright 2007 Marty Pauley <marty+perl@kasei.com>
  56. This program is free software; you can redistribute it and/or modify it under
  57. the same terms as Perl itself.  That means either (a) the GNU General Public
  58. License or (b) the Artistic License.
  59. =head2 ORIGINAL AUTHOR
  60. Michael G Schwern <schwern@pobox.com>
  61. =head1 SEE ALSO
  62. L<Class::Accessor>
  63. =cut
  64. 1;