gpt4 book ai didi

string - Raku:在将 Rational 强制为 Str 时尝试除以零

转载 作者:行者123 更新时间:2023-12-04 11:44:50 25 4
gpt4 key购买 nike

在添加更多数据之前,我一直在处理大量数据。结果以字符串的形式写入文件,但是我收到了这个错误信息,在我的代码梳理了2天后,我无法找到编程错误;在添加新数据之前,我的代码一直运行良好。

Died with the exception:
Attempt to divide by zero when coercing Rational to Str
in sub analyzeData at /home/xyz/numberCrunch.p6 line 2720
in block at /home/xyz/numberCrunch.p6 line 3363

Segmentation fault (core dumped)
第 2720 行是输出到文件的行: $fh.say("$result");
所以,Rational 似乎是一个延迟评估。有没有办法强制将 Rational 立即转换为小数?或者通过让 Rational 尽早检测到 0 分母使 Rational 变得更聪明?

最佳答案

首先:一个Rat分母为 0是一个完全合法的 Rational 值。所以创建一个 Rat分母为 0 时不会在创建时抛出异常。
我真的看到两个问题:

  • 你如何代表Rat分母为 0作为字符串?
  • 您希望您的程序如何对这样的事件使用react Rat ?

  • 当您代表 Rat s 作为字符串,很有可能会丢失精度:
    say 1/3;  # 0.333333
    所以 Rat的问题到字符串转换更通用。幸运的是,还有 .raku不会抛出的方法:
    say (1/3).raku;   # <1/3>
    say (42/0).raku; # <42/0>
    现在,如果您希望程序在分母为 0 时不将值打印到文件句柄,那么您有几种选择:
  • 前缀 try
  • try $fh.say($result)
  • 明确检查 0 分母
  • $fh.say($result) if $result.denominator
    最后,最后的错误信息:“Segmentation fault (core dumped)”有点令人担忧。如果这不是一个多线程程序,我们可能应该尝试找出发生这种情况的原因:执行错误不应创建段错误。如果是,那么也许我们需要更仔细地查看您的代码,以找出诸如数组和哈希之类的结构是否存在任何竞争条件。

    关于string - Raku:在将 Rational 强制为 Str 时尝试除以零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67980761/

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