2012-07-12 51 views
0

我對lisp很陌生,對java也很新穎。我正在研究java中的一個簡單的遊戲,我認爲在我通過REPL進行編碼時與遊戲進行交互會很有趣。我一直在關注Practical Common Lisp,並且我有基本功能結構的知識。我開始使用武裝熊的Common Lisp - 在Java虛擬機上運行的實現 - 並且能夠用於創建圖形用戶界面,如代碼的一些基本功能:但是我無法弄清楚如何麻煩與武裝熊普通lisp - 調用用戶定義的類從repl?

(defconstant +jframe+ "javax.swing.JFrame") 

(defun make-frame (length width &key visible) 
    "Create a +jframe+" 
    (let ((frame (jnew (jconstructor +jframe+)))) 
    (jcall (jmethod +jframe+ "setSize" "int" "int") 
     frame length width) 
    (if visible (frame-is-visible t frame)) 
    frame)) 

從lisp訪問用戶定義的類。作爲一個整體的實現似乎很少記錄,我發現難以從lisp內部開始使用java特定的東西。例如,我有一個名爲「Character」的編譯字符類。但是當我調用(jclass「Character」)時,我得到「class not found」錯誤。是否有可能讓abcl從lisp內部知道我的課程?

+0

最近的ABCL手冊:https://code.google.com/p/abcl-dynamic-install/downloads/detail?name=abcl-manual-20120205a.pdf 可能最好問ABCL的具體問題和建議對ABCL郵件列表進行改進。請參閱http://common-lisp.net/project/armedbear/ – 2012-07-12 07:03:01

+0

請澄清:你有哪些類 - jars中的Java類或者'defclass'定義的Lisp CLOS類? – 2012-07-13 04:52:03

+0

Java中的所有類都有程序包前綴。所以你應該提供類似'(jclass「my.package.Character」)'的東西 – 2012-07-16 12:34:26

回答

2

如果你想創建你自己寫的,並封裝在一個jar文件中的Java類的實例,使用添加到類路徑:

(add-to-classpath '("Character.jar")) 

然後,(jnew "org.example.Character")應該給你一個Character類的實例(假設它位於org.example名稱空間中)。