はい、楽しい質問ですが、mapのようなコレクション操作を使い、正しく縮小して折り畳むことを学びたいと思います。n個の空白を生成するライナーを改善する
私はこれをしなかった:
コレクション操作でn個のスペースを生成するより良い、慣用的な方法は何ですかscala> Range(0,3) map(_=>" ") reduceLeft(_+_)
res15: java.lang.String = " "
?
はい、楽しい質問ですが、mapのようなコレクション操作を使い、正しく縮小して折り畳むことを学びたいと思います。n個の空白を生成するライナーを改善する
私はこれをしなかった:
コレクション操作でn個のスペースを生成するより良い、慣用的な方法は何ですかscala> Range(0,3) map(_=>" ") reduceLeft(_+_)
res15: java.lang.String = " "
?
技術的には別の、おそらくより読みやすいアプローチです:ここで何が起こっている
scala> " " * 3
res1: String = " "
は、ということです" "
は、scala.Predef.augmentString
によってStringOps
のインスタンスに暗黙的に変換され、StringOps
の*
メソッドが呼び出されます。
更新:これは明らかに-itがmap
またはreduce
などの高次機能はありませんあなたが「コレクション操作」によるものではないので、私は、一部は冗談のようなものとして、これを意味しました。私は間違いなく実際のコードで私のバージョン(StringOps
バージョン)を使用したいと思いますが、(教育上の理由から、同様の問題などで)高次関数を使用したい場合、あなたのバージョンはかなり慣用的です。私は個人的に範囲を構築するのにuntil
を使用し、reduceLeft
の代わりにreduce
(連結が連想しているので)-i.e。、virtualeyesが答えに書いたものをほとんど使用します。
1 until 10 map (_=> " ") reduce(_+_)
StringOps
がscala.collection.immutable
パッケージ内にあるので、以下では、私が推測する、「コレクション・オペレーション」である
私はfoldLeft
がより適切だと思う:トラヴィス・ソリューションとして
Range(0,3).foldLeft("")((str, i) => str + " ")
としてエレガントされないが、今のところ二最もエレガントな方法私見:
List.fill (3)(' ').mkString
素晴らしいものは、Scalaはルビーをしたとは思いませんでした/ Groovy実際にはそうです;-) – virtualeyes