scala - выдает синтаксис - PullRequest
7 голосов
/ 21 марта 2012

Я читаю книгу по программированию Scala (Программирование в Scala), и у меня есть вопрос о синтаксисе yield.

Согласно книге, синтаксис yield можно выразить так: по пунктам доходность тела

но когда я пытаюсь запустить скрипт ниже, компилятор жалуется на слишком много аргументов для 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, как его использовать?

1 Ответ

16 голосов
/ 21 марта 2012

Короче говоря, любое выражение (даже если оно возвращает 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
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...