首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala - yield语法

scala - yield语法
EN

Stack Overflow用户
提问于 2012-03-21 08:23:03
回答 1查看 10.5K关注 0票数 7

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

根据这本书,yield的语法可以表达为: for子句yield

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

代码语言:javascript
复制
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?
  }

那么,我的问题是什么是what语法的"body“部分,如何使用它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-21 08:30:00

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

代码语言:javascript
复制
def scalaFiles = 
  for (
    file <- filesHere
    if file.isFile
    if file.getName.endsWith(".scala")
  ) yield {
    // here is expression
  }

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

代码语言:javascript
复制
scalaFiles: Array[Unit]

下一个选项是:

代码语言:javascript
复制
for(...) yield file.getName

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

代码语言:javascript
复制
def scalaFiles = 
      for (
        file <- filesHere;
        if file.isFile;
        name = file.getName;
        if name.endsWith(".scala")
      ) yield {
        name
      }
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9796939

复制
相关文章

相似问题

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