如何从 perl6 调用 Java 方法

2024-03-21

use java::util::zip::CRC32:from<java>;

my $crc = CRC32.new();
for 'Hello, Java'.encode('utf-8') {
    $crc.'method/update/(B)V'($_);
}
say $crc.getValue();

遗憾的是,这不起作用

Method 'method/update/(B)V' not found for invocant of class 'java.util.zip.CRC32'

此代码可从以下链接获取。这是我能找到的唯一例子

  1. JVM 上的 Rakudo Perl 6(幻灯片) http://www.jnthn.net/papers/2013-yapceu-jvm.pdf
  2. Perl 6 降临日历:第 03 天 – JVM 上的 Rakudo Perl 6 http://perl6advent.wordpress.com/2013/12/03/day-03-rakudo-perl-6-on-the-jvm/

最终答案

结合中解释的代码清理你的答案已经清理干净了下面的部分介绍了 Pepe Schwarz 在预期警报下面我们得到:

use java::util::zip::CRC32:from<Java>;

my $crc = CRC32.new();

for 'Hello, Java'.encode('utf-8').list { 
    $crc.update($_);
}

say $crc.getValue();

你的答案已经清理干净了

use v6;
use java::util::zip::CRC32:from<Java>;

my $crc = CRC32.new();

for 'Hello, Java'.encode('utf-8').list { # Appended `.list` 
    $crc.'method/update/(I)V'($_); 
}
say $crc.getValue();

一个重要的变化是附加的.list.

The 'Hello, Java'.encode('utf-8')片段返回一个对象,autf8。该对象仅向for陈述。所以for仅迭代一次,将对象传递给代码块update行在其中。

如果只迭代一次就有意义update线是.'method/update/([B)V',它映射到一个需要 8 位整数缓冲区的 Java 方法,这本质上是 Perl 6utf8是。但是,这需要一些支持 Perl 6 代码(大概在核心编译器中)来编组(自动转换)Perl 6utf8进入Javabuf[]如果该代码曾经存在/工作过,那么当我使用最新的 Rakudo 进行测试时,它肯定无法工作。

但如果有人明智地附加一个.list如上所示并更改代码块以匹配,事情就解决了。

首先,.list结果在for语句迭代一系列整数。

其次,和你一样,我调用了 Java 方法的 Integer arg 版本(.'method/update/(I)V')而不是原始的缓冲区参数版本,然后代码可以正常工作。 (这意味着从 Perl 6 返回的无符号 8 位整数的二进制表示utf8object 要么已经是 Java 方法所期望的,要么是自动为您编组的。)

另一个需要改变的是from<java>需要是from<Java>根据您下面的评论 - 谢谢。

预期警报

截至 2015 年 1 月:

  • 仅仅使用 Rakudo/NQP 的 JVM 后端(即在 JVM 上运行纯 P6 代码)仍然需要更多的强化才能正式宣布可供生产使用。 (这是整个 P6 生态系统今年预计将进行的全面强化的补充。)JVM 后端有望在 2015 年实现——它有望成为 Perl 6 首次正式发布的一部分,为 Perl 6 做好准备。今年的生产使用——但这在很大程度上取决于需求以及有更多的开发人员使用它并贡献补丁。

  • P6代码调用Java代码是额外的项目。 Pepe Schwarz 在过去几个月里在加快速度、学习代码库和登陆提交 https://github.com/rakudo/rakudo/commits/nom?author=peschwa。他已经实现了本答案开头所示的明显更好的短名称调用,并完成了更多用于 P6 和 Java 类型之间转换的封送逻辑,并且正在积极征求反馈和具体改进请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 perl6 调用 Java 方法 的相关文章

随机推荐

  • ld:架构armv7的871个重复符号,clang:错误:链接器命令失败,退出代码1(使用-v查看调用)

    我在 iPhone 应用程序中使用 FastPDFKit 来显示 PDF 当我在模拟器上运行该项目时 它工作正常 但是 当我在 iPhone 上运行该项目时 出现以下错误 duplicate symbol value map in User
  • 如何多次查询并最后关闭连接?

    我想打开与 mysql 数据库的连接并使用不同的查询检索数据 我是否需要在每次获取数据时关闭连接 或者是否有更好的方法可以多次查询并仅在最后关闭连接 目前我这样做 db dbConnect MySQL user root password
  • 我们可以导出 Kibana 中的所有搜索结果数据吗?

    我正在尝试导出 Kibana 5 中的所有搜索结果数据 但它仅导出结果的计数 有没有办法将所有数据导出为 CSV 格式 在基巴纳 到目前为止尝试过 单击搜索结果底部的符号 可视化 尝试使用 原始 和 格式化 选项 数据以 CSV 格式导出
  • symfony:如何设置不同环境的配置参数文件?

    如何为每个环境设置不同的配置参数文件 目前参数在parameters yml两者都使用dev and prod环境 但我需要不同的参数才能在产品中部署我的应用程序 您可以将所有使用的参数放入dev环境在一个app config parame
  • Postgresql计数+排序性能

    我使用 postgresql 和 psycopg2 构建了一个小型库存系统 一切都很好 除了当我想创建内容的聚合摘要 报告时 由于 count 和排序 我的性能非常糟糕 数据库架构如下 CREATE TABLE hosts id SERIA
  • 如何更新 Kubernetes 中的 api 版本列表

    我尝试在我的配置中使用 autoscaling v2beta2 apiVersion 如下本教程 https kubernetes io docs tasks run application horizontal pod autoscale
  • Perl 中的简单并行处理

    我在某个对象的函数内有一些代码块 它们可以并行运行并加快速度 我尝试使用subs parallel通过以下方式 所有这些都在函数体内 my is a done parallelize block a do some work return
  • 意外的 T_ENCAPSED_AND_WHITESPACE,期待 T_STRING 或 T_VARIABLE 或 T_NUM_STRING 错误 [重复]

    这个问题在这里已经有答案了 我对这个错误一直茫然 似乎不知道问题是什么 当我运行查询时 我收到此错误 意外的 T ENCAPSED AND WHITESPACE 需要 T STRING 或 T VARIABLE 或 T NUM STRING
  • 带 Bootstrap 的 Google 地图没有响应

    我正在使用 bootstrap 并嵌入了 Google Maps API 3 map canvas没有反应 它是固定宽度 另外 如果我使用height auto and width auto地图未显示在页面中 Why div class c
  • PyTorch - 参数不变

    为了了解 pytorch 的工作原理 我尝试对多元正态分布中的一些参数进行最大似然估计 然而 它似乎不适用于任何协方差相关的参数 所以我的问题是 为什么这段代码不起作用 import torch def make covariance ma
  • Flexdashboard多属性页面

    我正在学习 flexdashboard 并为未来的应用程序尝试一些不同的布局 但我无法为同一页面分配不同的属性 我希望第二页有一个行布局 列在导航栏 A 中 并在标题前面有一个图标 当我这样写时 data orientation rows
  • 在SSMS中将存储过程结果集导出到Excel

    我正在使用 SSMS 并尝试将存储过程的结果导出到新的 Excel 文件 SP 接受 int 参数 但我找不到在查询中调用它的方法 最新努力 EXEC sp makewebtask outputfile C Users me Documen
  • PHP手机浏览器检测?

    我需要一种在服务器端检测移动浏览器的方法 我想要一种不需要我做太多设置和维护的方法 但仍然可以为我提供 至少 Android Mobile Safari 和 Blackberry 浏览器以及 Opera 等替代浏览器的准确检测 我希望至少有
  • 使 jqGrid 可移动

    看起来 jqGrid 是基于 jQuery 对话框的 是否有可能使其可移动 像对话框一样 我已经能够将它放在对话框中 但有两个标题栏等看起来很奇怪 我 认为 可以向其中添加必要的类以使其可移动 但我对 jQuery 和 jqGrid 仍然相
  • Firebase Firestore JavaScript:查找未设置字段的文档

    在 Firebase Firestore 中 我可以查询未设置特定字段的文档吗 我知道如果我这样做 collectionReference where requires null 不会做我想做的事null是根本不同的 undefined驱动
  • 使用 JavaScript 创建 Powerpoint

    JavaScript 无法在客户端文件系统上本地创建文件 但是 我想知道是否可以通过某种 JSON 在网页 div 或 iframe 中以某种方式创建 Powerpoint MIME 然后让 UserAgent 找出它是 Powerpoin
  • iOS Safari HTML 表单下一个/上一个按钮 - 它们如何工作?

    免责声明 我正在使用 JQuery Mobile 我有一堆带有不同表单的页面 但其中一些页面在按下下一个 上一个按钮时似乎表现出不同的行为 所有表单都设置了选项卡索引 Form 1 工作完美 只是它跳过了 JQuery Mobile 翻转开
  • 在 Visual Studio 2008 中合并时强制比较文件

    目前 当我在 Visual Studio 2008 中右键单击 gt 合并特定文件时 它会尝试 并且通常会成功 自动将该文件合并到我指定的目标 如何强制 VS 始终允许我在合并工具中手动比较和合并文件 我应该提到我的源代码管理是 TFS 这
  • 红宝石脱轨

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 有时感觉我的公司是世界上唯一一家使用Ruby而不使用Ruby on Rails的公司 以至于R
  • 如何从 perl6 调用 Java 方法

    use java util zip CRC32 from