运行外部命令,我应该
import sys.process._
val result="ls a" !
然后当使用演员时,我还需要使用"!"发送消息。所以!是在actor和进程中定义的,但是我需要在同一个代码块中使用它们,怎么做?
答案 0 :(得分:2)
我没有看到Process
和ActorRef
都定义了具有相同名称的方法的问题。
模拟示例是
class A { def ! = println("A") }
class B { def ! = println("B") }
val a = new A
val b = new B
a.! // "A"
b.! // "B"
根本没有名称冲突或含糊不清。
您唯一需要担心的是从String
到Process
的隐式转换。
"foo".!
有效,因为Process
是String
可隐式转换为定义!
方法的唯一类。
正如文档所说,如果您改为使用类似"foo".lines
的内容,那么编译器就会混淆,因为它不知道是将String
转换为Process
还是转换为{{1因为两者都定义了StringLike
方法。
但是 - 再次 - 这不是你的情况,你可以安全地做一些事情:
lines
并且编译器不应该抱怨。
答案 1 :(得分:-1)
此类案例的recommended方法似乎只是导入Process对象:
import scala.sys.process.Process
Process("find src -name *.scala -exec grep null {} ;") #| Process("xargs test -z") #&& Process("echo null-free") #|| Process("echo null detected") !
在你的情况下:
import scala.sys.process.Process
Process("ls a")