scala for yield ディレクトリのファイル名をとる

Pocket

scala yieldがよくわからん

コップ本 p137

val filesHere = (new java.io.File(".")).listFiles

def scalaFiles =      
  for {
    file <- filesHere
    if file.getName.endsWith(".sbt")
  } yield file

反復的に生成された値を操作しただけで、操作後は忘れてしまっていたが、値を反復生成して記録しておくことができる。
とある。
配列に格納できる。

for式の本体が実行されるたびに結果値が生成される。生成された結果値をコレクションにまとめたものになる

上のものをyieldを使わないでprintlnするとこう

scala>val filesHere = (new java.io.File(".")).listFiles
filesHere: Array[java.io.File] = Array(./test.sbt, ./target, ./README.md, ./project, ./.gitignore, ./.git, ./discord-bot.js, ./build.sbt, ./.idea, ./src)

scala> for {
     | file <- filesHere
     | if file.getName.endsWith(".sbt")
     | } println (file)
./test.sbt
./build.sbt

ふむふむ

上のものを叩くとこうなる

scala> scalaFiles
res0: Array[java.io.File] = Array(./test.sbt, ./build.sbt)

今回はFile型なのでArray[File]になった

forで回した結果をまとめるのがyield でいいんじゃろか

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください