执行嵌入到一行终端命令中的 Swift 代码

Luk*_*nek 3 bash terminal swift

我知道有 Swift REPL 和 Xcode 游乐场,但我想知道 Swift 中是否有替代方案,ruby -e "<code>"其中sh -c "<code>"给定的一行代码将作为命令的结果执行?

aya*_*aio 6

没有直接的等效项(您可以使用 向swift命令询问其选项,swift --help然后看看有没有像 Ruby 那样的选项-e)。

但有一个解决方法。

echo您可以使用and |(“管道”)直接将 Swift 表达式传递给编译器,如下所示:

echo "print(42)" | swift
Run Code Online (Sandbox Code Playgroud)

结果:

欢迎使用 Apple Swift 版本 2.1.1(“700.1.101.9 700.1.78”)。输入 :help 寻求帮助。
42

我想这与您正在寻找的行为类似。

我们注意到它总是打印介绍语句,但是有一种方法可以解决这个问题,通过-在命令末尾添加,如下所示:

echo "print(42)" | swift -
Run Code Online (Sandbox Code Playgroud)

结果:

42

使用文字字符串时,转义双引号:

echo "print(\"hello\")" | swift -
Run Code Online (Sandbox Code Playgroud)

结果:

你好

您可以执行任何表达式,甚至循环:

echo "for num in 1...5 { print(num) }" | swift -
Run Code Online (Sandbox Code Playgroud)

结果:

1
2
3
4
5

ETC。

它仍然是 REPL,因此它会提供有关变量的反馈(省略-最后的技巧),例如:

echo "let x = 42;print(x)" | swift
Run Code Online (Sandbox Code Playgroud)

结果:

欢迎使用 Apple Swift 版本 2.1.1(“700.1.101.9 700.1.78”)。输入 :help 寻求帮助。
42
x:智力 = 42