2016-06-03 4 views
1

나는 Frege을 시도해 왔으며, 내가하고 싶은 첫 번째 일은 자바 인터페이스를 구현하는 것이다.Frege에서 Java 인터페이스를 구현하는 방법은 무엇입니까?

어떻게 완료 되나요?

package mypkg; 

import frege.repl.FregeRepl; 
import frege.runtime.Concurrent; 
import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 


public class FregeMain implements BundleActivator { 

    public FregeMain() { 

    } 

    @Override 
    public void start(BundleContext context) throws Exception { 
     System.out.println("Frege Bundle activated"); 
     new Thread(() -> FregeRepl.main(new String[ 0 ])).start(); 
    } 

    @Override 
    public void stop(BundleContext context) throws Exception { 
     System.out.println("Frege stopping. Goodbye!"); 
     Concurrent.shutDownIfExists(); 
    } 

} 

는 프레게에서 이것을 구현하기 위해, 내가 알고 있어야합니다 :

여기에 자바에서 내 예제 클래스가 구현 mypkg.FregeMain 전화로 볼 수 있습니다 뭔가를 선언하는 방법

  • BundleActivator의 JVM 바이트 코드 (OSGi 프레임 워크가 해당 인터페이스를 구현하는 클래스에 대해 jar를 스캔하고 자동으로 호출하므로 이것이 중요 함을 알아 두십시오).

  • Runnable (아마도 하스켈 람다로)을 구현하고 Thread 생성자로 전달하는 방법. 또한 동일한 문제 : Java 인터페이스를 구현하지만 이번에는 익명 클래스 또는 람다를 사용합니다.

은 내가 Calling Java from Frege 게시물을 이해하려고 노력하지만, 아마도 프레게/하스켈의 경험 내 부족으로, 난 그냥 그 대부분을 이해하지 않습니다.

입력 해 주셔서 감사합니다.

+0

왜 이렇게할까요? Java glue 코드가 짧고 정확할 수 있습니까? – Ingo

+0

나는 이것을하지 않을 것이다. 나는 단지 배우고 싶다. – Renato

+0

나는 이해한다. 그래서 "인터페이스"의 개념은 실제로 Frege의 일부가 아닙니다. 따라서 위의 코드는 잘되어야합니다. 매우 특정 자바 특정 일을하기 때문에, 그것이 자바에 있다면 괜찮습니다. – Ingo

답변

1

Frege에서 Java 인터페이스를 구현하는 가장 간단한 방법은 인라인 모듈 정의를 사용하는 것입니다. 일부 철저한 예가 있습니다 https://github.com/Frege/FregeFX/blob/master/fregefx/src/main/frege/fregefx/JavaFxUtils.fr

+0

이 예제는 frege 파일에 인라인 된 자바 코드처럼 보입니다. 너는 어떻게하는거야? 샘플에서 동일한 코드를 보여줄 수 있습니까? – Renato

+1

네이티브 선언은'data BA = 네이티브 org.osgi.framework.BundleActivator'이고 네이티브 모듈 인터페이스 BA는 {'네 메소드들'}' – Ingo

관련 문제