new(gender => "female"); $colt-6ren">
gpt4 book ai didi

perl - 将对象传递给 Perl 中的另一个类

转载 作者:行者123 更新时间:2023-12-02 00:08:02 25 4
gpt4 key购买 nike

当我这样做时会发生什么:

$stallion = Horse->new(gender => "male");
$molly = Mule->new(gender => "female");
$colt = $molly->breed($stallion);

我无法理解该代码上发生了什么?

  1. 当那个 stallion 引用被传递给类的另一个实例化时会发生什么?
  2. 在该代码中是否有另一个类中的另一个方法?
  3. 根据该示例,是否有 2 个不同的类? (具有新方法或构造函数的 Horse 类,具有另一个新构造函数的 Mule 类)。

    $colt = $molly->品种($stallion);

根据该代码,我的理解是 $molly 与 Mule 类相同,后者具有除 new 之外的其他方法 - breed .我说得对吗?

最佳答案

From that example, are there 2 different classes? (Horse class with a new method or constructor, Mule class with another new constructor).

非常正确。

任何时候你看到 STRING_LITERAL->METHOD_NAME() 的表达式,几乎可以保证 STRING_LITERAL 是类名。

当您看到 STRING_LITERAL->new() 时,除非编写代码的人为了自己的利益而决定太聪明,这将是一个调用到该类的构造函数,返回该类的一个对象。 (但是,作为构造函数的“new”只是一个自愿的约定;Perl 中没有任何强制执行的东西——太聪明/太笨的人可能已经定义了“new()”sub 来返回 2+ 的值3 - 除了查看代码和测试之外,您无法保证)

在该示例之后,您有望得到:

  • $stallion - 持有从 Horse 类构造函数返回的值 - 将具有 Horse 类的对象作为值。

  • $molly - 持有从 Mule 类构造函数返回的值 - 将具有 Mule 类对象的值。


What happens when that stallion reference is passed to another instantiation of class?

  • $molly->breed($stallion); 调用中发生了什么 - 正如在昨天的问题中所回答的那样,这是一种调用方法的对象方式,所以您要做的是:

    • 创建参数列表(在本例中为 $stallion)
    • 将对象添加到它前面,得到 ($molly, $stallion)
    • 将该列表传递给 breed() 子程序,该子程序当然必须在 $molly 对象所属的类中定义(例如,是 Mule 类中的方法)
    • breed() 子例程中,特殊列表变量 @_ 将别名为此参数列表的元素($molly、$stallion)。
    • 接下来会发生什么 100% 完全取决于“品种”子代码的编写方式

And in that code is breed another method in another class?

如上面的要点所述,是的,如果 $molly 是某个类 (Mule) 的对象,则表达式 $molly->METHOD_NAME() 表示调用该名称的方法在 $molly 是其对象的类中已知(从父类定义或继承)。

关于perl - 将对象传递给 Perl 中的另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com