Хобрук: Ваш путь к мастерству в программировании

Что делает оператор «require java» в сценариях JRuby?

Я читал о совместимости Java с Ruby, поэтому использование 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'

10.02.2016

  • К какой части вам нужно больше пояснений? Это то же самое, что путь к классам Java с JRuby. 11.02.2016
  • Меня интересуют изменения в $CLASSPATH и $LOAD_PATH после этого утверждения, потому что я не могу их обнаружить. 11.02.2016
  • Вы хотите получить доступ к файлам классов Java в CLASSPATH? Затем require 'java', если вы не хотите получать доступ к каким-либо файлам классов Java, не делайте этого. 11.02.2016
  • Извините, если я не слишком сообразителен, но рассмотрим два примера: java -jar jruby-complete-9.0.5.0.jar -e '$CLASSPATH << "lib/opennlp-tools-1.6.0.jar"; Java::OpennlpToolsTokenize::SimpleTokenizer.new' и java -jar jruby-complete-9.0.5.0.jar -e 'puts Java::JavaLang::String.new("Hello")'. Почему они работают? 11.02.2016

Ответы:


1

В этом вопросе есть две части, на которые нужно ответить, и некоторые пояснения, которые мы должны внести в нашу документацию (я уже сделал попытку в https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby):

  1. требуется «Ява». Он загружает возможность загружать классы Java и обрабатывать их, как если бы они были объектами/классами Ruby. Однако, начиная с JRuby 1.7.x, JRuby внутренне должен требовать "java", поэтому он уже требует "java" к моменту оценки вашего выражения. Так что технически это правда, что «require 'java'» загружает совместимость с Java, но поскольку наше ядро ​​​​делает это сейчас, к тому времени, когда вы его вызываете, это в значительной степени не работает (см. возвращаемое значение требования). Мы по-прежнему рекомендуем размещать его в начале любого файла, в котором вы используете Java-взаимодействие. просто так это задокументировано в вашем коде. Кроме того, тот факт, что он загружается, является скорее деталью реализации, а не семантической деталью (например, в отдаленном будущем мы, возможно, не потребуем этого в нашем ядре).

  2. Непонятная формулировка: «Однако это не даст вам доступа к каким-либо несвязанным библиотекам». Поэтому, если вы хотите получить доступ к библиотеке, которой нет в вашем CLASSPATH (это было указано в скобках), вам нужно добавить их в свой LOAD_PATH (или через прямое требование). Я подправил это предложение, чтобы, надеюсь, сделать его более понятным.

11.02.2016
  • Очень ясно! Я заметил ложное возвращаемое значение по запросу, но связал это с некоторой конфигурацией моей установки. Ваше объяснение очень помогло! 12.02.2016
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..