[等效于Python的python -i thisfiletoload.py的快速REPL?谢谢。即
python -i thisfiletoload.py
在命令提示符下。快速等效的REPL是什么?
Swift以前有一个-i
“输入”标志,但是该标志已弃用,不再需要。
从命令行运行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
我只能通过首先将文件转换为模块来完成此操作。
$ 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
如果您修改命令以将其结果输出到当前目录以外的其他位置,请确保通过-L
和-I
参数将所做的更改传达给REPL。