2016-02-10 10 views
0

我閱讀了Ruby中的Java互操作性,因此使用JRuby是一個明顯的選擇。但不知何故,我並沒有真正掌握require 'java'背後的想法。該文檔說:JRuby腳本中的'require'java''語句是做什麼的?

...將讓您訪問任何捆綁Java庫(您的Java類路徑中的類)。但是,這不會讓您訪問任何非捆綁的庫。

有沒有比較詳細的解釋嗎?

更準確地說我不明白,爲什麼下面的代碼工作沒有require "java"

$ export CLASSPATH=".:lib/opennlp-tools-1.6.0.jar" $ jruby -e 't = Java::OpennlpToolsTokenize::SimpleTokenizer.new; puts t.tokenize("I went to school").to_a'

+0

哪一部分,你需要更多的解釋?它與運行JRuby的Java類路徑相同。 –

+0

因爲我找不到任何東西,所以我對'$ CLASSPATH'和'$ LOAD_PATH'中的更改感興趣。 –

+0

你想訪問CLASSPATH中的Java類文件嗎?然後'require'java'',如果你不想訪問任何Java類文件則不需要。 –

回答

0

有兩個部分對這個問題這需要回答和澄清,我們應該對我們的文檔(我已經在https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby)嘗試過了:

  1. 需要'java'。它加載加載Java類的能力,並將它們視爲Ruby對象/類。但是,從JRuby 1.7.x開始,JRuby內部需要'java',因此在評估表達式時它已經需要'java'。因此從技術上講這是真的,「需要‘Java’作爲」荷載Java的互操作性,但由於我們的內核是這樣,現在是基本上無操作通過調用它的時候(見的要求返回值)。我們仍然建議將它放在使用Java interop的任何文件的頂部。只是在您的代碼中記錄它。另外,它恰好被加載的事實更多是一個impl細節而不是一個語義細節(例如,在遙遠的未來,我們可能不會在我們的內核中要求它)。

  2. 不清楚空話:「不過,這不會給你訪問任何非捆綁庫。」所以,如果你想訪問一個不在CLASSPATH中的庫(這在括號中有規定),你需要將它們添加到你的LOAD_PATH中(或者通過直接require'ing)。我調整了這句話,希望更清楚。

+0

非常清楚!我通過'require'注意到了「false」返回值,但將其與我的安裝的某些配置關聯。你的解釋幫助了很多! –