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。通常,您应该保留blessBUILDALL并覆盖newBUILD进行自定义。还要注意,名称new只是一个约定:这是一个常规方法,除了调用bless之外,它没有做任何特殊的事情。

关于oop - perl6 bless和new之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35662443/

10-12 20:15