Smalltalk, принять аргумент командной строки в качестве имени файла - PullRequest
1 голос
/ 07 марта 2020

Я новичок в Smalltalk и пытаюсь понять, как принять аргумент командной строки в качестве имени файла. В Интернете я видел следующий фрагмент:

f := FileStream open: 'fileName' mode: FileStream read

Но я хочу знать, как изменить его на основе ввода в командной строке пользователя для fileName. Ниже описано, как этот проект будет скомпилирован и запущен:

gst file1.st file2.st file3.st file4.st -f mainFile.st readThisFile.dat addiotnalArg

Итак, как я могу получить имя указанного пользователем файла в Smalltalk?

1 Ответ

2 голосов
/ 07 марта 2020

Согласно https://www.gnu.org/software/smalltalk/manual/gst.html#Invocation вы можете получить доступ к аргументам командной строки, которые не интерпретируются самой GNU Smalltalk с помощью Smalltalk arguments. Это будет массив, содержащий эти аргументы как строки.

-a
--smalltalk-args

Обрабатывать впоследствии все параметры как аргументы, которые будут переданы извлекаемому коду Smalltalk с Smalltalk arguments, игнорируя их в качестве аргументов самой GNU Smalltalk. [...]

-f
--file

Следующие две командные строки эквивалентны:

gst -f file args...
gst -q file -a args...

Поскольку ваш readThisFile.dat это первый аргумент, вы можете получить к нему доступ с помощью Smalltalk arguments at: 1 и вставить его в сообщение конструктора FileStream:

f := FileStream open: (Smalltalk arguments at: 1) mode: FileStream read

Вы также можете использовать first

f := FileStream open: Smalltalk arguments first mode: FileStream read.
...