2011-02-06 60 views

回答

28

参见The Arrow Operator在perlop得到:

->” 是一个中缀引用操作,就像它是在C和C++。如果右侧是[...]{...}(...)下标,则左侧必须分别对数组,哈希或子例程使用硬引用或符号引用。 (或者从技术上讲,如果它是一个数组或哈希引用被用于分配,则该位置能够保存一个硬引用。)请参见perlreftutperlref

否则,右侧是一个方法名称或一个包含方法名称或子例程引用的简单标量变量,左侧必须是对象(有福的引用)或类名(也就是说,一个包名称)。见perlobj

+5

倒数第二行有点误导。如果箭头右侧的标量是代码ref,那么左侧是什么都没有关系。使用`my $ say_array = sub {print'@ {$ _ [0]} \ n“};`然后您可以写出如[1,2,3] - > $ say_array;`这样的行来打印`1 2 3 ` – 2011-02-06 17:28:43

3

@{}部分是反引用 - 这意味着$m->links参考到一个数组,所以该操作员deferences它来指直接阵列,然后将其复制到@top_links

第8章'Camel Book'是了解参考资料的好地方,或者Perl文档的perlref部分。

->箭头运算符是一个对象取消引用,在这种情况下获取$m对象的links成员。同样,骆驼书后面的章节详细介绍了Perl的面向对象支持。另请参阅Perl文档的perlobj部分。

12

一般而言,->暗示取消引用。此语法来自C.

在您的示例中,它表示来自$m中对象实例的方法调用:调用方法links。这在对象Modern Perl一章中有解释。件数perlsubperlfaq7,perlobj,perltoot提供的细节。

一般的参考文献,search Stack Overflow;这是一个反复出现的话题。

0

Perl的箭头操作符具有一个其他用途:

讲座>方法调用子程序方法类,包

虽然它比您的代码示例完全不同。只是为了标题中的问题的完整性而包含它。

相关问题