class Singleton {
# We create a lexical variable in the class block that holds our single instance.
my Singleton $instance = Singleton.bless; # You can add initialization arguments here.
method new {!!!} # Singleton.new dies.
method instance { $instance; }
}
我找到了实现Singlelton的上述代码,我想知道Perl6中bless和new之间的区别是什么?
my Singleton $instance = Singleton.bless;
my Singleton $instance = Singleton.new;
最佳答案
将bless
视为基础结构,而new
是(可自定义)界面的一部分。
如果查看类Mu
(类系统的根)的implementation,您会看到bless
调用了底层构造函数nqp::create
,然后调用了BUILDALL
,后者在继承链中调用了适当的BUILD
(子)初始化对象的方法。默认的new
依次调用bless
。
因此new
调用bless
调用BUILDALL
调用BUILD
。通常,您应该保留bless
和BUILDALL
并覆盖new
和BUILD
进行自定义。还要注意,名称new
只是一个约定:这是一个常规方法,除了调用bless
之外,它没有做任何特殊的事情。
关于oop - perl6 bless和new之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35662443/