2010-08-31 49 views
3

我希望能夠將對象存儲在散列結構中,以便我可以將對象的名稱作爲變量來處理。 有人可以幫我做一個 子新{ ... } 例程創建一個新的對象作爲散列的成員?我不確定如何去做這件事,或者如何在存儲這樣的對象時參考和/或使用對象。我只是想能夠使用並引用其他子例程的對象名稱。如何在perl中創建對象的散列

看到我的評論在How can I get name of an object in Perl?爲什麼我想這樣做。

謝謝

+0

你的意思是你想使用_class_的名字來命名這些目錄嗎? – flies 2010-09-01 13:47:36

回答

5

對象沒有真正的名字。你爲什麼試圖給他們的名字?引用的基本點之一是,你不需要知道一個名字,或者它是什麼類,來處理它。

可能有更好的方法來實現你的任務。

然而,由於對象只是引用,引用只是標量,對象可以是一個哈希值:

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

你可能想看看書,如中級Perl學習如何參考和對象的工作。

+0

請參閱我的評論http://stackoverflow.com/questions/3605685/how-to-get-name-of-object-in-perl爲什麼我想這樣做。 – Feynman 2010-08-31 23:16:06

+1

將「name」方法添加到對象中,並在實例化對象時進行設置。 – CanSpice 2010-08-31 23:35:24

+3

我看到了您的其他帖子,但我仍然不知道您在嘗試着什麼。我認爲你是在注重方法而不是結束。 – 2010-08-31 23:42:01

2

不太明白你想要做什麼。也許你可以提供一些具體的例子?

您可以將對象存儲到散列中,就像perl中的任何其他變量一樣。

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

假設你知道儲存在「富」的對象是一個Foo對象,並在「酒吧」是一個酒吧對象,那麼你可以從哈希的對象,並使用它。

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

您可能希望在運行時以編程方式確定此行爲。假設你堅持這個命名方案。

+1

調用方法時最好不要使用間接對象表示法。所以不是'new Foo(...);'--use'Foo-> new(...);'參見perlobj(http://perldoc.perl.org/perlobj.html#Indirect-Object-Syntax )瞭解更多信息。 – daotoad 2010-09-02 02:27:08