Что эквивалентно быстрому REPL Python python -i thisfiletoload.py?

Что эквивалентно для быстрого REPL Python python -i thisfiletoload.py? Спасибо. то есть

python -i thisfiletoload.py

в командной строке. Что такое быстрый эквивалент REPL?


person ernestyalumni2014    schedule 15.06.2015    source источник
comment
Вам помог мой ответ? Пожалуйста, отметьте его как принятый, если он есть.   -  person JAL    schedule 16.06.2015
comment
Нет. Когда я набираю в командной строке swift [file.swift] , после запуска файла swift он возвращается обратно в командную строку, а не остается в REPL вместе со всеми объявленными переменными.   -  person ernestyalumni2014    schedule 20.06.2015


Ответы (2)


Раньше в Swift был флаг -i «input», но этот флаг устарел и больше не нужен.

Запуск swift [file.swift] из командной строки приведет к желаемому поведению.

test.swift:

println("hello")
let x = 1
println("x = \(x)")

Выход консоли:

➜  Test  swift test.swift
hello
x = 1

С -i:

➜  Test  swift -i test.swift
<unknown>:0: error: the flag '-i' is no longer required and has been removed; use 'swift input-filename'

Версия:

➜  Test  swift --version
Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)
Target: x86_64-apple-darwin14.3.0
person JAL    schedule 15.06.2015

Я смог сделать это, только сначала преобразовав файл в модуль.

$ swiftc filename.swift -emit-library -sdk $( xcrun --sdk macosx --show-sdk-path) -emit-module -module-link-name MyCode -module-name MyCode -lSystem

Это скомпилирует ваш файл и создаст .dylib и .swiftmodule в текущем каталоге (к которому у вас, конечно, должен быть доступ для чтения и записи). Затем из того же каталога просто:

$ swift -L. -I.

Добро пожаловать в Apple Swift версии 5.2.2 (swiftlang-1103.0.32.6 clang-1103.0.32.51). Введите :help для получения помощи.

1> import MyCode

2> /// Begin using your module's code...


В качестве функции .bashrc вы можете:

repl_mod () {
    SDK=$( xcrun --sdk macosx --show-sdk-path)
    MODNAME=${1%.swift}
    $( xcrun -f swiftc) $1 -emit-library -sdk $SDK -emit-module -module-link-name $MODNAME -module-name $MODNAME -lSystem
}

Что создаст модуль в текущем каталоге, названный в честь вашего имени файла:

repl_mod mycode.swift

swift -L. -I. ...

>1 import mycode

Если вы измените команду для вывода ее результатов не в текущий каталог, обязательно передайте это изменение в REPL через аргументы -L и -I.

person ideasuns    schedule 10.06.2020