2014-06-08 33 views
-1

我在socket编程一个我的Scala代码While循环中,我得到了socket.inputstream到一个变量斯卡拉传递变量

的这里的问题是,我不能在主要功能或任何使用这个变量其他功能

 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 
} 
} 

我想将变量作为参数传递给另一个函数

+0

我不明白这个问题。 “def run”与这个有什么关系?为什么不能将'var'的值传递给'println'。为什么你需要一个'var'开头?示例中没有任何内容正在改变它的价值。 – drstevens

+0

运行只是范围内的另一个功能,我希望我们能够在主功能中“进入” –

+0

您是否使用单线程? –

回答

2

你不能在你的日常main使用in。从逻辑上讲,这样做没有意义。一方面,while循环将创建多个连接,并为in创建多个值,因此从逻辑上讲,在调用run之后,没有任何单个值inmain中的点有意义。任何需要引用in的代码都应该放在while循环中。这可能例如包含对另一个函数的调用,其中您将in作为参数传递给该函数。