Действительно ли возможно автоматически предварительно загрузить пользовательские классы в отличный интерпретатор?

Там какой-либо путь состоит в том, чтобы автоматически загрузить пользовательские классы в отличном интерпретаторе, способ, которым автоматически загружается System.out (таким образом, Вы не должны импортировать System.out для использования println)? Я хочу смочь записать сценарии, которые используют пользовательские классы и запускают скрипты в отличном интерпретаторе, не имея необходимость импортировать все классы все время.

1
задан Steve 27 June 2010 в 23:14
поделиться

2 ответа

Да, вам просто нужно создать файл profile / rc. Просто создайте файл ~ / .groovy / groovysh.profile и поместите туда свой импорт. Вы также захотите убедиться, что любые дополнительные классы, которые вы хотите включить, являются частью вашего CLASSPATH.

пример: ~ / .groovy / groovysh.profile:

import org.apache.commons.lang.StringUtils

println "in groovysh.profile"

Затем запустите Groovysh и используйте метод из StringUtils:

% groovysh
in groovysh.profile
Groovy Shell (1.7.3, JVM: 1.6.0_20)
Type 'help' or '\h' for help.
---------------------------------------------------------------------------------------------------------------------------------
groovy:000> StringUtils.isWhitespace("    ")
===> true
groovy:000> 

Вы можете видеть, что импорт на месте (и что он также распечатал распечатку, которую я имел в профиле. Этот пример будет работать только в том случае, если у вас есть jar-файл commons-lang в пути к классам.

См. страницу Groovy Shell для получения дополнительных сведений.

2
ответ дан 2 September 2019 в 23:27
поделиться

Groovy добавляет некоторые методы в Object, в том числе такие, как println и printf. , который можно ожидать от printWriters. Они неявно используют System.out. На самом деле именно так получается, если кажется, что System.out доступен по всему миру.

Если вы хотите импортировать набор классов по умолчанию, чтобы их можно было использовать без указания полного имени пакета, применяется комментарий Теда о groovysh.profile.

Однако, если вы хотите, чтобы конкретный объект, например System.out, был доступен глобально, чтобы его методы можно было вызывать без ссылки на объект, вы можете добавить к Object некоторые динамические методы. Например, чтобы сделать глобально доступными методы ведения журнала глобального регистратора JDK по умолчанию:

Object.metaClass.info = { String message ->
    java.util.logging.Logger.global.info(message)
}
Object.metaClass.warning = { String message ->
    java.util.logging.Logger.global.warning(message)
}
Object.metaClass.severe = { String message ->
    java.util.logging.Logger.global.severe(message)
}
etc...

После применения этих методов к базовому метаклассу объекта любой объект может вызвать info ("message") и получить его logged, что делает Logger.global доступным точно так же, как System.out.

0
ответ дан 2 September 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: