使用NativeCall将C库函数合并到Perl6中

使用NativeCall将C库函数合并到Perl6中,第1张

概述我试图在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失败,给出错误: Thi 我试图在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; # Ratsay 3.14.nude.join('/'); # 157/50

每次调用它时,你总是可以将值强制为Num.

lgamma( $x.Num )

这似乎并不那么好.

我只是将原生子包裹在另一个中,将所有实数转换为Num.
(Real是除Complex之外的所有数字)

sub lgamma ( Num(Real) \n --> Num ){  use NativeCall;  sub lgamma (num64 --> num64) is native {}  lgamma( n )}say lgamma(3);    # 0.6931471805599453say lgamma(3.14); # 0.8261387047770286
总结

以上是内存溢出为你收集整理的使用NativeCall将C库函数合并到Perl6中全部内容,希望文章能够帮你解决使用NativeCall将C库函数合并到Perl6中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存