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 でいいんじゃろか