假设我有一个弗雷格模块
module Util where
total :: [Int] -> Int
total xs = fold (+) 0 xs
如果“total”是用Java编写的,我可以通过以下方式调用它
Util.total(Arrays.asList(1,2,3));
从 Java 调用 Frege 实现的最佳方式是什么?
最佳答案
你可以使用一个好的旧int []数组,相应的frege类型将是JArray Int。因为 Java 和 frege 中都可以从列表中创建数组,也可以将数组创建为列表,因此它们非常适合此类任务。
请使用 repl 了解如何将数组转换为列表,以便将其传递给函数。
如果有疑问 rgd。堆空间中,Data.Iterators 中还有一个所谓的 ArrayIterator,即 ListView 类型类的实例。因此,另一种选择是编写您的 frege 以便获取 ListView
total xs = fold (+) 0 xs.toList
在java中调用相当于
ArrayIterator.from (... code to create array here ...)
如果您无法更改 frege 代码,或者不想更改,您可以使用以下命令创建一个惰性列表
(ArrayIterator.from (... code to create array here ...)).toList
最后但并非最不重要的一点是,您可以折叠数组,而无需先使用 foldArray
进行转换。
关于java - 将整数列表从 java 传递到 frege 函数的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349444/