小编hsr*_*srv的帖子

为什么我的Moo对象继承自非Moo类,为某些模块添加到父包中?

我正在尝试使用GObject IntrospectionMoo在Perl中创建一个Gtk3应用程序.有一个来自Gtk的非Moo类Gtk::ApplicationWindow,我通过Moo使用它进行子类化extends 'Gtk::ApplicationWindow'.问题是,当创建该子类的对象时,它仍然是父类的类型 - 即Gtk::ApplicationWindow.

我通过继承自己的非基于Moo的类来尝试相同的事情,并且从这个子类创建的对象具有正确的类型.造成这种差异的原因是什么?

use v5.10;
use strict;
use warnings;

# Import the Gtk classes (non-Moo)
use Glib::Object::Introspection;
Glib::Object::Introspection->setup(basename => 'Gtk', version => '3.0', package => 'Gtk');
Glib::Object::Introspection->setup(basename => 'Gio', version => '2.0', package => 'Gio');

#################################################
{
    # A dummy non-Moo class
    package ClassNonMoo;
    sub new { bless {}, shift; }
}

{
    # Moo class extending the dummy class
    package ClassMoo;
    use Moo;

    extends 'ClassNonMoo';

    sub …
Run Code Online (Sandbox Code Playgroud)

perl moo gobject-introspection

8
推荐指数
1
解决办法
505
查看次数

标签 统计

gobject-introspection ×1

moo ×1

perl ×1