2

Python 的 python -i thisfiletoload.py 的 swift REPL 的等价物是什么?谢谢。IE

python -i thisfiletoload.py

在命令提示符中。什么是 swift REPL 等价物?

4

2 回答 2

0

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
于 2015-06-15T16:46:44.723 回答
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-Iargs 将该更改传达给 REPL。

于 2020-06-10T20:53:07.143 回答