首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scala中的即时评估

scala中的即时评估
EN

Stack Overflow用户
提问于 2014-10-16 02:56:35
回答 1查看 982关注 0票数 1

我用scala编写了一个套接字程序,我想知道何时从服务器获得响应。以下是代码:

代码语言:javascript
运行
复制
  class Client(val id:Int) extends Runnable{
    override def run(): Unit = {
      val s = new Socket
      val address = new InetSocketAddress("localhost",9977)
      s.connect( address )

      val lines = Source.fromInputStream(s.getInputStream).getLines()

      lines foreach println  // print result 
      println("%d connected" format id)
      // lines foreach println  // print result after
      s.close

    }
  }

但是,如果我不打印结果( lines foreach println)或稍后打印出来,println("%d connected" format id)将立即执行。

服务器端需要很长时间才能给出响应。不应该是即时的。我不知道为什么会这样?

它的值'lines‘是否懒惰地被评估?

我可以在执行以下代码之前计算“行”吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-16 03:07:29

您没有包含import语句,所以我猜您使用的是scala.io.Source。在这种情况下,scala.io.Source.fromInputStream(...).getLines()返回一个Iterator,迭代器是惰性的。这是签名:

代码语言:javascript
运行
复制
def getLines(): collection.Iterator[String] 

这实际上很好,因为如果收到大量数据,您可能不希望获得所有行。如果您想强迫它具体化,只需将迭代器转换为如下集合:

代码语言:javascript
运行
复制
lines.toList
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26395500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档