Что делает #!/usr/bin / … в начале среднего файла?

Основное отличие между разработчиком и фабрикой, по моему скромному мнению, то, что разработчик полезен, когда необходимо сделать много вещей создать объект. Например, вообразите DOM. Необходимо создать много узлов и атрибутов для получения конечного объекта. Фабрика используется, когда фабрика может легко создать весь объект в одном вызове метода.

Одним примером использования разработчика является здание XML-документ, я использовал эту модель при создании фрагментов HTML, например, у меня мог бы быть Разработчик для создания определенного типа таблицы, и это могло бы иметь следующие методы (параметры не показывают) :

BuildOrderHeaderRow()
BuildLineItemSubHeaderRow()
BuildOrderRow()
BuildLineItemSubRow()

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

Выезд Шаблон Разработчика на Википедию .

16
задан Rob 14 July 2009 в 00:09
поделиться

7 ответов

#! называется " shebang " и представляет собой способ выполнения сценариев в Unix. Когда вы попросите ОС запустить файл, она выяснит, что это не обычный EXE-файл, и #! на старте служит волшебным маркером, который инструктирует ОС выполнить команду после #! и подключаем эту команду так, чтобы этот файл стал аргументом этой команды

, если myfile.py содержит

#!/usr/bin/python

, выполнение этого файла не сильно отличается от выполнения

$ /usr/bin/python myfile.py

Мои знания Haskell недостаточны. Но для вашего конкретного случая кажется, что команда runghc просто читает первую строку, анализирует все аргументы, указанные в этом #! строка, записывает остальную часть файла во временный файл и запускает ghc для этого временного файла (из которого будет удалена первая задержка - см. runghc.hs в источниках ghc для получения дополнительной информации).

Если вы хотите сделать то же самое с javac, вы можете использовать тот же подход, что и runghc. Напишите оболочку, которая съедает первую строку файла, записывает остальную часть файла во временный файл и запускает javac для этого файла.

18
ответ дан 30 November 2019 в 21:29
поделиться

Причина, по которой это работает, заключается в том, что Python, Perl и, по-видимому, Haskell - все это интерпретируемые языки. Это стандартный способ Unix назначить интерпретатор, который будет запускать сценарий. Java - это компилируемый язык, и его нельзя запускать с интерпретатором.

0
ответ дан 30 November 2019 в 21:29
поделиться

Если ваш файл - hello.hs, а первая строка - "#! / Usr / bin / runghc", то оболочка выполнит:

/usr/bin/runghc hello.hs

Эта первая строка в основном сообщает оболочке что использовать для запуска сценария.

Что касается примера java, первая строка должна быть исполняемым файлом, который запускает сценарий, а не то, что компилирует сценарий.

5
ответ дан 30 November 2019 в 21:29
поделиться

Shebang работает только с интерпретируемыми языками .... обычно это ничего не значит для компилятора, который в большинстве случаев выдает ошибку

1
ответ дан 30 November 2019 в 21:29
поделиться

Javac - это компилятор, а не интерпретатор.

В нем отсутствует интерактивный режим, который, как я считаю, является причиной «магии». То же самое не будет работать с GCC, поскольку в нем отсутствует такая же функция.

dmd (компилятор D), например, является примером компилятора, который поддерживает интерпертацию, имеет такой вид интерактивного редактирования (#! / Usr / bin / dmd -run).

0
ответ дан 30 November 2019 в 21:29
поделиться

Это расположение исполняемого файла на вашем компьютере для интерпретации вашего сценария. Java - это компилируемый язык, поэтому в таком утверждении нет необходимости.

Более того, дело в том, что это специальный комментарий, конструкция в Java не будет законной в этом смысле, поскольку # не является допустимым маркером комментария. Если такая конструкция имеет смысл ... чего нет ... она будет выглядеть так:

//! / Usr / local / jdk1.6.0_13 / bin / javac

0
ответ дан 30 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

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