相当于Python的python -i thisfiletoload.py的快速REPL?

问题描述 投票:2回答:2

[等效于Python的python -i thisfiletoload.py的快速REPL?谢谢。即

python -i thisfiletoload.py

在命令提示符下。快速等效的REPL是什么?

swift read-eval-print-loop interactive-mode
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

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。

© www.soinside.com 2019 - 2024. All rights reserved.