使用NativeCall将C库函数合并到Perl6中
发布时间:2020-12-16 10:15:04 所属栏目:百科 来源:网络整理
导读:我试图在Perl6中使用C的math.h中的lgamma. 我如何将其融入Perl6? 我试过了 use NativeCall;sub lgamma(num64 -- num64) is native(Str) {};say lgamma(3e0);my $x = 3.14;say lgamma($x); 这适用于第一个数字(一个Str),但对于第二个,$x失败,给出错误: This
我试图在Perl6中使用C的math.h中的lgamma.
我如何将其融入Perl6? 我试过了 use NativeCall; sub lgamma(num64 --> num64) is native(Str) {}; say lgamma(3e0); my $x = 3.14; say lgamma($x); 这适用于第一个数字(一个Str),但对于第二个,$x失败,给出错误: This type cannot unbox to a native number: P6opaque,Rat in block <unit> at pvalue.p6 line 8 我想这样做很简单,就像在Perl5中一样:使用POSIX’lgamma’;然后lgamma($x),但我不知道如何在Perl6中做到这一点. 解决方法
原生值的错误并不总是很清楚.
基本上它是说老鼠不是一个数字. 3.14是一只老鼠. (合理的) say 3.14.^name; # Rat say 3.14.nude.join('/'); # 157/50 每次调用它时,你总是可以将值强制为Num. lgamma( $x.Num ) 这似乎并不那么好. 我只是将原生子包裹在另一个中,将所有实数转换为Num. sub lgamma ( Num(Real) n --> Num ){ use NativeCall; sub lgamma (num64 --> num64) is native {} lgamma( n ) } say lgamma(3); # 0.6931471805599453 say lgamma(3.14); # 0.8261387047770286 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |