【发布时间】:2011-06-22 05:55:36
【问题描述】:
我一直在代码中看到->,但我不确定它的含义。例如:
@top_links = @{$m->links};
这条线有什么作用?另外,我在哪里可以读到它?
【问题讨论】:
标签: perl
我一直在代码中看到->,但我不确定它的含义。例如:
@top_links = @{$m->links};
这条线有什么作用?另外,我在哪里可以读到它?
【问题讨论】:
标签: perl
请参阅 perlop 中的The Arrow Operator:
"
->" 是一个中缀解引用运算符,就像在 C 和 C++ 中一样。如果右侧是[...]、{...}或(...)下标,则左侧必须分别是对数组、散列或子例程的硬引用或符号引用。 (或者从技术上讲,一个能够保存硬引用的位置,如果它是用于分配的数组或哈希引用。)参见perlreftut 和perlref。否则,右侧是方法名称或包含方法名称或子例程引用的简单标量变量,左侧必须是对象(祝福引用)或类名(即包裹名字)。见perlobj。
【讨论】:
my $say_array = sub {print "@{$_[0]}\n"};,您可以编写像[1, 2, 3]->$say_array; 这样的行,打印1 2 3
外部@{} 部分是一个解引用——这意味着$m->links 是一个数组的引用,所以这个操作符将它引用为直接引用数组,然后复制到@ 987654326@
“Camel Book”的第 8 章是学习参考资料或 Perl 文档的 perlref 部分的好地方。
-> 箭头操作符是一个对象解引用,在这种情况下获取$m 对象的links 成员。类似地,Camel Book 的后续章节详细介绍了 Perl 的面向对象支持。另请参阅 Perl 文档的 perlobj 部分。
【讨论】:
一般来说,-> 暗示取消引用。此语法来自 C。
在您的示例中,它表示方法调用:从$m 中的对象实例调用方法links。这在Modern Perl 的对象一章中进行了解释。 perlsub、perlfaq7、perlobj、perltoot 提供详细信息。
对于一般参考,search Stack Overflow;这是一个反复出现的话题。
【讨论】:
Perl 箭头运算符还有另一种用途:
Class->方法调用包Class中的子程序方法
虽然它与您的代码示例完全不同。仅包括它是为了标题中问题的完整性。
【讨论】: