Scala传递变量
在我的scala socket编程代码中有一个While循环,在该循环中,我将socket.inputstream转换为一个变量 这里的问题是,我不能在主函数或任何其他函数中使用此变量Scala传递变量,scala,parameter-passing,var,Scala,Parameter Passing,Var,在我的scala socket编程代码中有一个While循环,在该循环中,我将socket.inputstream转换为一个变量 这里的问题是,我不能在主函数或任何其他函数中使用此变量 class NetworkService(port: Int, poolSize: Int) extends Runnable { val serverSocket = new ServerSocket(port) val pool: ExecutorService = Executors.n
class NetworkService(port: Int, poolSize: Int) extends Runnable {
val serverSocket = new ServerSocket(port)
val pool: ExecutorService = Executors.newFixedThreadPool(poolSize)
def run() {
try {
while (true) {
// This will block until a connection comes in.
val socket = serverSocket.accept()
val in = new BufferedReader(new InputStreamReader(socket.getInputStream)).readLine
pool.execute(new Handler(socket))
}
} finally {
pool.shutdown()
}
}
}
class Handler(socket: Socket) extends Runnable {
def message = (Thread.currentThread.getName() + "\n").getBytes
def run() {
socket.getOutputStream.write(message)
socket.getOutputStream.close()
}
}
object MyServer {
def main(args: Array[String]) {
(new NetworkService(2030, 2)).run
////////I WANT TO USE THE IN here
}
}
我想将变量作为参数传递给另一个函数,该函数不能在主例程中使用。从逻辑上讲,这样做没有意义。首先,while循环将创建多个连接和in的多个值,因此从逻辑上讲,在调用run之后,in的单个值在main中没有意义。任何需要在中引用的代码都应该放在while循环中。例如,这可能包括对另一个函数的调用,在该函数中作为参数传入。我不理解这个问题。def run与此有什么关系?为什么不能将var的值传递给println。为什么首先需要一个var?你的例子中没有任何东西改变它的值。Run只是作用域中的另一个函数,我想让我们在主函数中了解你使用的是单线程吗?我将发布整个代码。你收到了什么错误消息?