免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2053 | 回复: 9

perl的类 里面有其他类对象作为成员变量,怎么办? [复制链接]

论坛徽章:
0
发表于 2012-05-15 13:26 |显示全部楼层
本帖最后由 317550564 于 2012-05-15 13:46 编辑

package Account;

sub new{
    my $class = shift;
    my ($user_name,$password)=@_ ;
    my $self={
        "user_name" => $user_name,
        "password" => $password,
         Area???#有个Area类对象
    } ;
    bless($self, $class);
    return $self;
}
Area#有个Area类

有个账户类
三个参数
user_name
password
area 是个类对象
我该怎么初始化?
在new()之前先创建一个Area对象,
还是在new{}里 创建Area对象?

调用的时候
$area = Account->new('user_name'=>"tom",'password'=>"abc",???);#这里呢?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2012-05-15 13:37 |显示全部楼层
请你理清头绪再问一遍

论坛徽章:
0
发表于 2012-05-15 13:47 |显示全部楼层
zhlong8 发表于 2012-05-15 13:37
请你理清头绪再问一遍


我又问了一遍

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2012-05-15 13:58 |显示全部楼层
317550564 发表于 2012-05-15 13:26
package Account;

sub new{


怎么都可以,看你怎么设计了。比如你的 area 可以很简洁的描述比如  area => 'Beijing/China' 这样的描述型,那在 Account 里面转换下直接构建,这样调用的时候会很清晰。如果构建这个 area 很复杂那先构建再作为参数传入可以降低耦合。

最后你这么用 @_ 是不能用 key => value 这种方式调用的

论坛徽章:
0
发表于 2012-05-15 14:00 |显示全部楼层
zhlong8 发表于 2012-05-15 13:58
怎么都可以,看你怎么设计了。比如你的 area 可以很简洁的描述比如  area => 'Beijing/China' 这样的描 ...


谢谢啊。
就是不明白。
那应该用什么方式?
不明白

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2012-05-15 14:07 |显示全部楼层
317550564 发表于 2012-05-15 14:00
谢谢啊。
就是不明白。
那应该用什么方式?


你可以随便选择一种用,如果代码写着感觉很痛苦那就是选错了。

new 应该这样写才行

sub new {
    my($class, %params) = @_;
    my $user_name = $params{'user_name'};
    ...;
}

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-05-15 14:28 |显示全部楼层
回复 1# 317550564

flw说Perl的面向对象就是“实用主义”。这个说法极准确的说明了Perl面向对象的状况。

昨天一个JAVA程序员问我用什么语言,我说Perl。他说“那个语言好像是脚本语言,而且都不是面向对象的”。

如果“面向对象”是你的目标,那还是别用Perl了,最后你非骂娘不可。如果你只是想用一些面向对象的技术方便写模块,那就看这个Oreilly.Learning.Perl.Objects.References.And.Modules.eBook-LiB或是网上的一些例子。

你甚至不用再问Perl里是不是可以这样可以那样,书里介绍的就是Perl提供的,没有介绍的就是没有的。
   

论坛徽章:
0
发表于 2012-05-15 14:34 |显示全部楼层
zhlong8 发表于 2012-05-15 14:07
你可以随便选择一种用,如果代码写着感觉很痛苦那就是选错了。

new 应该这样写才行


好多不明白的。。你一句话当我20分钟学习。。厉害了。。

是应该用
$area=Area->new("BEIJING");
$account=Account->new("tom","abc",$area);#这样么?


我觉得这种写法
my $self={
         参数1...
         参数2...
         参数3...
}
很直观,很给力
但是不知道哪些地方适用。

论坛徽章:
0
发表于 2012-05-15 14:36 |显示全部楼层
py 发表于 2012-05-15 14:28
回复 1# 317550564

flw说Perl的面向对象就是“实用主义”。这个说法极准确的说明了Perl面向对象的状况。 ...



恩,perl适用的地方不同

我是在做个小项目用mason+mod_perl做个网站
需要业务逻辑分离
就想到了 面向对象。
所以遇到很多麻烦 需要指教。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2012-05-15 15:00 |显示全部楼层
317550564 发表于 2012-05-15 14:34
好多不明白的。。你一句话当我20分钟学习。。厉害了。。

是应该用


这么用是最保险的,将来你熟练了再考虑另一种方式的可能性吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP