【问题标题】:What does the -> arrow do in Perl?Perl 中的 -> 箭头有什么作用?
【发布时间】:2011-06-22 05:55:36
【问题描述】:

我一直在代码中看到->,但我不确定它的含义。例如:

@top_links = @{$m->links};

这条线有什么作用?另外,我在哪里可以读到它?

【问题讨论】:

    标签: perl


    【解决方案1】:

    请参阅 perlop 中的The Arrow Operator

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

    否则,右侧是方法名称或包含方法名称或子例程引用的简单标量变量,左侧必须是对象(祝福引用)或类名(即包裹名字)。见perlobj

    【讨论】:

    • 倒数第二行有点误导。如果箭头右侧的标量是代码参考,那么左侧是什么都没有关系。使用my $say_array = sub {print "@{$_[0]}\n"};,您可以编写像[1, 2, 3]->$say_array; 这样的行,打印1 2 3
    • 可能会提到它类似于 Python、Java、Javascript 等许多其他语言中的点运算符。
    • @Eric Strom:对我来说似乎是个错误
    • 这只是简单地复制/粘贴文档,如果所述文档难以理解,则尤其无益。
    • @Community,perlop 的答案对于不知道答案的人来说毫无用处。它假定您了解深奥的行话和 C 或 C++。有人可以提供 MWE 或指向我们的教程吗?
    【解决方案2】:

    外部@{} 部分是一个解引用——这意味着$m->links 是一个数组的引用,所以这个操作符将它引用为直接引用数组,然后复制到@ 987654326@

    Camel Book”的第 8 章是学习参考资料或 Perl 文档的 perlref 部分的好地方。

    -> 箭头操作符是一个对象解引用,在这种情况下获取$m 对象的links 成员。类似地,Camel Book 的后续章节详细介绍了 Perl 的面向对象支持。另请参阅 Perl 文档的 perlobj 部分。

    【讨论】:

      【解决方案3】:

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

      在您的示例中,它表示方法调用:从$m 中的对象实例调用方法links。这在Modern Perl对象一章中进行了解释。 perlsubperlfaq7perlobjperltoot 提供详细信息。

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

      【讨论】:

        【解决方案4】:

        Perl 箭头运算符还有另一种用途:

        Class->方法调用包Class中的子程序方法

        虽然它与您的代码示例完全不同。仅包括它是为了标题中问题的完整性。

        【讨论】:

          猜你喜欢
          • 2017-10-12
          • 2013-02-15
          • 2015-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多