Можете ли вы вызывать скомпилированные классы JRuby из Java? - PullRequest
7 голосов
/ 05 мая 2010

Итак, я пришел к общей идее написать код на JRuby, а затем получить доступ ко всем классам через Java. Я понятия не имею, возможно ли это вообще, но я все равно хотела спросить. Допустим я есть код JRuby:

class adder
   def addme
      return 22
   end
end

Если бы я скомпилировал это с помощью jrubyc, я мог бы сделать что-то подобное в java:

import adder;
class anything {
    void testMethod() 
    {
       adder a = new adder();
       int x = a.addme();
    }
 }

Теперь, посмотрев на него, я могу подумать, что Java не будет иметь ни малейшего представления, какой тип тестового элемента addme вернет, так что он может не работать. Я не знаю, но я все равно хотел выбросить это.

Спасибо

Ответы [ 3 ]

8 голосов
/ 05 мая 2010

В JRuby 1.5 появился новый способ сделать это! Ваш вопрос очень актуален. Вот пример сеанса:

http://gist.github.com/390342

Мы надеемся, что у нас скоро будет сообщение в блоге, подробно описывающее эту новую функцию. Здесь есть несколько предварительных документов по вики JRuby:

http://wiki.jruby.org/GeneratingJavaClasses

1 голос
/ 05 мая 2010

На самом деле есть два способа, которыми вы можете вызывать код ruby ​​из Java, первый медленнее, но вы можете изменить его во время выполнения, вызвав механизм сценариев, как по этой ссылке . но что касается того, как вы это сделали, jrubyc компилирует ruby ​​в javaBytecode, что означает, что java увидит его как код java

jrubyc adder.rb --java Компиляция файла "adder.rb" как класса "Adder.class"

и так же, как вы сделали ...

так вы бы назвали его, как и любой другой класс Java

import org.jruby.RubyObject

Adder ad = new Adder();

RubyObject ro = ad.addme();

Ресурс

0 голосов
/ 05 мая 2010

Это возможно с помощью встроенного пакета в JRuby, но я думаю, что здесь выходит за рамки ответа. Проверь это: http://kenai.com/projects/jruby/pages/RedBridge

...