【问题标题】:Printing objects in Perl 6在 Perl 6 中打印对象
【发布时间】:2018-10-08 20:47:03
【问题描述】:

为什么我会得到不同的结果?

class Car {
  has $.wheels;
}

my $my_car = Car.new( wheels => 4 );

say  $my_car ;  # Car.new(wheels => 4)
say "$my_car";  # Car<94582644384824>
put  $my_car ;  # Car<94582644384824>

我想在第 2 和第 3 种情况下,$my_car 是字符串化的,但结果是什么意思?

【问题讨论】:

  • 猜测,“94582644384824”是一个内存地址,它是 P6 对象的默认非人类友好字符串化的一部分。

标签: raku


【解决方案1】:

say 命令在其参数上调用.gistput 命令在其参数上调用 .Str。当您插入对象时也会发生这种情况。

默认的gist 方法查看对象的公共属性,并从中创建一个字符串。

您可以通过提供自己的Str 方法来控制对象的字符串化方式。

【讨论】:

  • 最后一句没看懂。如果一个对象使用.Str 进行字符串化,那么提供我自己的.gist 如何改变它的字符串化方式?
  • 经过一些试验,我想我明白你对自定义 .gist 的意思。我仍然不明白为什么.Str 没有提供任何(人类)有用的信息。
  • 它应该(可能?)提供什么有用的信息?这是你的课——如果你想要一些信息,请制作一个 .Str() 来提供它。.gist() 用于人类可消费的字符串化 .perl() 用于计算机消费。你打算在这个类中使用 .Str 做什么?
  • 哎呀,我的意思是“你自己的Str 方法”。太晚了。对不起。
  • @raiph ElizabethMattijsen, CurtTilmes 感谢大家,现在我明白了。
猜你喜欢
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
相关资源
最近更新 更多