gpt4 book ai didi

signature - 仅当 Str 表示整数时,如何将其转换为 Int?

转载 作者:行者123 更新时间:2023-12-02 23:24:01 26 4
gpt4 key购买 nike

在 Perl 6 中,您可以指定可以强制类型的类型。例如,您需要一个 Int,但需要其他可以转换为 Int 的东西。当您不需要 IntStr 的单独候选项(其中字符串表示整数值)时,这会很方便。

但是,转换似乎有点激进,因为转换不仅改变类型而且愿意改变数据。这部分是由于类型变化和将数字截断为整数的预期操作合并而成的问题。从概念上讲,这些是不同的想法,但它们在 Str.Int 中交织在一起(实际上夹着 Numeric 的旁路):

sub foo ( Int:D() $n ) { put "Got <$n> of type {$n.^name}" }
foo( 80 ); # Got <80> of type Int
foo( '99' ); # Got <99> of type Int
foo( 1.5 ); # Got <1> of type Int
foo( '1.5' ); # Got <1> of type Int

尝试将其限制为 Str 并没有更好:

sub foo ( Int:D(Str:D) $n ) { put "Got <$n> of type {$n.^name}" }
foo( '1.5' ); # Got <1> of type Int

我可以制作一些看起来最容易理解的适配器:

multi foo ( Int:D $n ) {
put "Got <$n> of type {$n.^name}"
}
multi foo ( Str:D $n where { $^n.Int == $^n.Numeric } ) {
foo( $n.Int );
}

foo( '1.5' ); # Cannot resolve ...

我可能可以想出一些子集,但这并不能令人满意。所以关键是,我可以像这样强制而不改变值(即使它改变了表示)吗?

<小时/>

事实证明此功能已损坏并且没有修复时间表:RT 132980 。基本上,目标类型不是强制执行的。文档已更新。我的建议是根本不要使用它。

最佳答案

一个可能的签名是

Numeric() $ where Int

或者,限制为字符串,

Numeric(Str:D) $ where Int

关于signature - 仅当 Str 表示整数时,如何将其转换为 Int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262872/

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