我知道有Swift REPL和Xcode playgrounds,但我想知道是否有一种替代ruby -e "<code>"
或sh -c "<code>"
的Swift方法,其中给定的单行代码将作为命令的结果执行?
没有直接的等价物(你可以使用 swift --help
命令查看其选项,发现没有类似 Ruby 的 -e
选项)。
但是有一种解决方法。
你可以使用 echo
和 |
(管道符号)将 Swift 表达式直接传递给编译器,如下所示:
echo "print(42)" | swift
结果:
欢迎使用苹果Swift 2.1.1版本(“700.1.101.9 700.1.78”)。键入:help获取帮助。
42
我猜这就是你想要的行为。
我们注意到它总是打印介绍语句,但有一种方法可以解决这个问题,只需在命令结尾添加-
即可,如下所示:
echo "print(42)" | swift -
结果:
42
在使用字面字符串时,需要转义双引号:
echo "print(\"hello\")" | swift -
结果:
你好
您可以执行任何表达式,甚至循环:
echo "for num in 1...5 { print(num) }" | swift -
结果:
1
2
3
4
5
等等。
这仍然是REPL,因此它将反馈有关变量的信息(省略末尾的-
技巧),例如:
echo "let x = 42;print(x)" | swift
结果:
欢迎使用苹果Swift 2.1.1版本(“700.1.101.9 700.1.78”)。输入 :help 获取帮助。
42
x: Int = 42
swift -e
直接从命令行运行代码。bash-3.2$ swift --help | grep -e "-e "
-e <value> Executes a line of code provided on the command line
bash-3.2$ swift -e 'print("fofo")'
fofo
bash-3.2$ swift -e 'import Foundation ; var users = ["zoe", "joe", "albert", "james"] ; for user in users { print(user) }'
zoe
joe
albert
james
bash-3.2$