Perl:如何动态创建对象?

标签 perl oop object packages

我的目标是能够使用 $obj像这样:

print $obj->hello() . $obj->{foo};

我想创建一个内联对象,也许使用这样的东西:
my $obj = (
    foo => 1,
    hello => sub { return 'world' }
);

但是当我尝试使用 $obj作为一个对象,我得到一个错误,说 $obj 没有被祝福。是否有一些基类(如 PHP 中的 stdClass )我可以用来祝福散列,以便我可以将它用作对象?

对于那些了解 JavaScript 的人,我正在尝试执行以下操作,但在 Perl 中:
# JS CODE BELOW
var obj = { foo: 1, hello: function () { return 'world' } };
echo obj.hello() + obj.foo;

最佳答案

一种更 Perlish 的方法是为您的对象所需的方法创建一个单独的 namespace ,并为 bless 创建一个单独的 namespace 。使这些方法可用于您的对象的对象。执行此操作的代码仍然非常简洁。

my $obj = bless { foo => 1 }, "bar";
sub bar::hello { return 'world' };

正如 gbacon 建议的那样,如果你愿意写 $obj->{hello}->()而不是 $obj->hello() ,可以跳过祝福操作。
my $obj = { foo => 1, hello => sub { return 'world' } };

关于Perl:如何动态创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3406146/

相关文章:

perl - 如何将方法修饰符应用于 AUTOLOAD 生成的方法?

perl - 在 Perl 中修改然后切片未知大小的二维数组

我可以使用 C 进行面向对象编程吗?

javascript - 无法读取 null 的属性 ____

php - 从命名空间中的变量名实例化一个新类

perl - 如何在 Perl 中强制 long double

mysql - 如何使用 DBIC make_schema_at 更新架构?

c# - 从 C# 中的抽象列表调用对象特定方法

c++ - c++类中方法的实现

c++ - 如何在 C++ 中初始化对象的空数组?