大佬教程收集整理的这篇文章主要介绍了签名 – 只有当它表示整数时,如何将Str转换为Int?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是,转换似乎有点激进,因为转换不仅改变了类型,而且愿意改变数据.这部分是改变类型的混淆和将数字截断为整数的预期操作的问题.从概念上讲,这些是不同的想法,但它们在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
我可以制作一些似乎最容易理解的适配器:
@H_621_4@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.基本上,不强制执行目标类型.文档已更新.我的建议是根本不使用它.
如果您自己这样做,您可以更好地控制它的工作方式.
proto sub foo ( Int:D() $n ) {*} multi sub foo ( Any:D $n ) { my $i = try $n.Numeric.narrow; if $i ~~ Int:D { samewith $i } else { X::Typecheck::Binding::Parameter.new( # there are more arguments that should be added here got => $n,expected => Int:D(),).throw } } multi sub foo ( Int:D $n ) { put "Got <$n> of type {$n.^namE}" }
以上是大佬教程为你收集整理的签名 – 只有当它表示整数时,如何将Str转换为Int?全部内容,希望文章能够帮你解决签名 – 只有当它表示整数时,如何将Str转换为Int?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。