【发布时间】:2018-12-27 03:56:39
【问题描述】:
我正在尝试在 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 中:use POSIX 'lgamma';,然后是 lgamma($x),但我不知道如何在 Perl6 中做到这一点。
【问题讨论】:
-
你能把整个错误贴出来吗?
-
@jjmerelo 我已更新帖子以更完整地显示错误
-
在声明
$x时尝试使用num64原生类型:my num64 $x = 3.14.Num。如果没有num64声明符,它似乎也可以工作:my $x = 3.14.Num -
你也可以使用
3.14e0创建一个Num字面量 -
我想
is native(Str)不会像你认为的那样做。 (它也没有像我认为的那样做,因为我对它的作用没有任何想法,除了它对我没有意义。:))我怀疑它变成了is native('')的等价物我想反过来与is native相同。有关详细信息,请参阅theis nativedoc。同样,“这适用于第一个数字(Str)”也不正确,因为第一个数字(3e0)不是字符串/Str,而是Num。
标签: raku nativecall