我正在尝试使用GObject Introspection和Moo在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)