【问题标题】:scala - yield syntaxscala - 产量语法
【发布时间】:2012-04-05 12:26:37
【问题描述】:

我正在阅读一本关于 scala 编程的书(Scala 编程),我有一个关于 yield 语法的问题。

根据本书,yield 的语法可以表示为: for 子句产生正文

但是当我尝试运行下面的脚本时,编译器会抱怨 getName 的参数太多

def scalaFiles = 
  for (
    file <- filesHere
    if file.isFile
    if file.getName.endsWith(".scala")
  ) yield file.getName {
    // isn't this supposed to be the body part?
  }

所以,我的问题是 yield 语法的“主体”部分是什么,如何使用它?

【问题讨论】:

    标签: scala yield


    【解决方案1】:

    简而言之,任何表达式(即使是返回 Unit 的表达式),但您必须将该表达式括在括号中或直接将其下拉(仅适用于单个语句表达式):

    def scalaFiles = 
      for (
        file <- filesHere
        if file.isFile
        if file.getName.endsWith(".scala")
      ) yield {
        // here is expression
      }
    

    上面的代码可以工作(但没有意义):

    scalaFiles: Array[Unit]
    

    下一个选项是:

    for(...) yield file.getName
    

    作为提示,您可以像这样重写您的理解:

    def scalaFiles = 
          for (
            file <- filesHere;
            if file.isFile;
            name = file.getName;
            if name.endsWith(".scala")
          ) yield {
            name
          }
    

    【讨论】:

    • 啊,我明白了!感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2010-11-06
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多