Как сделать хеш объектов в perl - PullRequest
3 голосов
/ 01 сентября 2010

Я хотел бы иметь возможность хранить объекты в хеш-структуре, чтобы я мог работать с именем объекта в качестве переменной. Может ли кто-нибудь помочь мне сделать sub new { ... } подпрограмма, которая создает новый объект как член хеша? Я не совсем уверен, как это сделать или как ссылаться и / или использовать объект, когда он хранится таким образом. Я просто хочу иметь возможность использовать и ссылаться на имя объекта для других подпрограмм.

См. Мой комментарий в Как я могу получить имя объекта в Perl? , почему я хочу это сделать.

Спасибо

Ответы [ 2 ]

5 голосов
/ 01 сентября 2010

Объекты на самом деле не имеют имен.Почему вы пытаетесь дать им имена?Одним из фундаментальных указаний является то, что вам не нужно знать имя или даже какой это класс, чтобы работать с ним.

Вероятно, есть гораздо лучший способ выполнить вашу задачу.

Однако, поскольку объекты являются просто ссылками, а ссылки - просто скалярами, объект может иметь хеш-значение:

my %hash = (
    some_name => Class->new( ... ),
    other_name => Class->new( ... ).
    );

Возможно, вы захотите проверить книгу, например Промежуточный Perl чтобы узнать, как работают ссылки и объекты.

2 голосов
/ 01 сентября 2010

Не совсем понимаю, что вы пытаетесь сделать. Возможно, вы можете привести несколько конкретных примеров?

Вы можете хранить объекты в хешах, как и любую другую переменную в perl.

my %hash = ( );
$hash{'foo'} = new Foo(...);
$hash{'bar'} = new Bar(...);

Предполагая, что вы знаете, что объект, хранящийся в 'foo', является объектом Foo, а в 'bar' является объектом Bar, вы можете извлечь объекты из хеша и использовать его.

$hash{'foo'}->foo_method();
$hash{'bar'}->bar_method();

Возможно, вы захотите программно определить это поведение во время выполнения. Это предполагает, что вы придерживаетесь этой схемы именования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...