oop – 在Perl 6中继承私有属性
发布时间:2020-12-15 21:42:12 所属栏目:大数据 来源:网络整理
导读:我在文档中找不到任何内容,但似乎子类中没有访问其超类的私有变量.我对吗? class A { has $!a;}class B is A { has $.b; method set_a($x) { $!a = $x; }}my $var = B.new();$var.set_a(5);say $var.a; 这会给出一条错误消息: Attribute $!a not declared
我在文档中找不到任何内容,但似乎子类中没有访问其超类的私有变量.我对吗?
class A { has $!a; } class B is A { has $.b; method set_a($x) { $!a = $x; } } my $var = B.new(); $var.set_a(5); say $var.a; 这会给出一条错误消息: Attribute $!a not declared in class B BTW在哪里阅读文档中的类?我只发现了一个相当短的部分Classes and Objects. 解决方法
在Perl 6中,类中声明的属性只能在该类中访问.这意味着可以自信地重构班级中的州,而不必担心班级之外对该州的任何使用.
子类不会收到有关属性的任何特殊访问权限.某些语言提供受保护的修饰符. Perl 6中没有这样的设计.这个类是私有的,或者暴露给外部世界(比如$.a),因为: >就该类而言,子类是外部世界的一部分. 相反,角色中的属性被组合到类中,就好像它们已经在类本身中声明一样.因此,可以在类主体中使用来自组合角色的属性.如果要在OO上下文中编写可重用的功能块,那么在Perl 6中使用角色和组合更为典型,而不是继承.确实,将原始代码编写为: role A { has $!a; } class B does A { has $.b; method set_a($x) { $!a = $x; } method a() { $!a } } my $var = B.new(); $var.set_a(5); say $var.a; 按需工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |