首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Frege中导入Java库

在Frege中导入Java库
EN

Stack Overflow用户
提问于 2015-04-14 19:27:22
回答 2查看 282关注 0票数 1

我正在试用frege,我正在努力尝试使用一些本地Java库。

我正在用leiningen插件和Joda time来尝试。显然,lein插件没有正确地看到fregec的类路径,或者它可能与这种差异有关:

代码语言:javascript
复制
java -jar ~/Downloads/frege3.22.524-gcc99d7e.jar -fp ~/.m2/repository/joda-time/joda-time/2.7/joda-time-2.7.jar src/Hello.fr

就能像预期的那样找到Joda了

代码语言:javascript
复制
java -cp ~/.m2/repository/joda-time/joda-time/2.7/joda-time-2.7.jar -jar ~/Downloads/frege3.22.524-gcc99d7e.jar src/Hello.fr 

会失败的

代码语言:javascript
复制
`org.joda.time.Years` is not a known java class

根据维基的说法,这不应该发生。

正在运行的JVM的当前类路径加上目标目录总是在类路径上。

不过,即使在手动设置-fp之后,这段代码也无法编译:

代码语言:javascript
复制
module Hello where

data JodaYears = native org.joda.time.Years where
   pure native years :: Int -> JodaYears
   pure native getYears org.joda.time.Years.getYears :: JodaYears -> Int
   --                   ^ I tried both with and without this

错误是

代码语言:javascript
复制
Instance method or getter must be applied to java reference type.

但是我使用的唯一实例方法(getYears)将引用类型作为输入(JodaYears).我甚至尝试过使用org.joda.time.Years,但是编译仍然失败。

感谢任何可能对此有所了解的人

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-15 07:07:57

简单回答,因为使用手机。

不能同时使用-cp和-jar调用Java

显然,在这种情况下,类路径将被忽略。您可以尝试在-cp中提供两个jars,但也需要说明要运行哪个类。frege编译器是frege.compiler.Main

关于另一个错误,我认为是与“年份”有关,因为名称简单,所以将其作为实例方法。而另一种方法由于其限定名而被视为类方法。

因此,定义本机函数foo的规则如下:

纯原生 foo XXX ::frege类型

  1. 例如,XXX必须是一个简单的名称。您也可以忽略XXX,在这种情况下,它与您定义的frege名称相同(例如foo)。
  2. 对于类方法,XXX必须是该方法的完全限定名。
  3. 对于构造器,XXX必须是“新的”。
  4. 对于成员访问,XXX必须是".member“,其中成员是实际的成员名。
票数 1
EN

Stack Overflow用户

发布于 2015-04-15 17:59:24

正如Ingo所写的,years被认为是一个实例方法,因为它缺少完全限定的名称,也就是说:我需要用相反的方式编写它。我的helloworld代码的最后一个工作示例:

代码语言:javascript
复制
module Hello where

data JodaYears = native org.joda.time.Years where
     pure native years org.joda.time.Years.years :: Int -> JodaYears
     pure native getYears :: JodaYears -> Int

main _ = println $ JodaYears.getYears $ JodaYears.years 5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29635814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档