Vin*_*gio 6 erlang haskell scala yield map
我开始研究Scala编程语言.我对Erlang和Haskell等FP语言有一定的了解,我对for/yield表达式的含义有疑问,比如:
for (arg <- args) yield arg.length
Run Code Online (Sandbox Code Playgroud)
这将收集具有任何输入参数长度的数组.根据我的理解,这似乎是普通FP编程中的map函数:
map (\a -> a * 2) [1, 2, 3] (in Haskell)
Run Code Online (Sandbox Code Playgroud)
我知道Scala库包含scala.collection.map方法,所以我想知道:使用这两种风格有什么区别或限制,或者它们完全相同?
ten*_*shi 14
for ... yieldScala的理解是由编译器翻译map,flatMap和withFilter方法调用.for没有yield被翻译成foreach方法调用.您可以在此处找到一些示例和更多信息:
http://tataryn.net/2011/10/whats-in-a-scala-for-comprehension/
和这里
http://adamwojtuniak.wordpress.com/2010/09/24/scala-for-comprehensions/
Scala的for/ yield表达式完全等同于Haskell中的list/monad理解,并且具有完全相同的功能,只要您坚持每个for表达式一种类型.(不过我不知道Erlang.)
特别是,您的示例正好转换为[length arg | arg <- args]将Scala方法调用x.f转换为Haskell函数应用程序f x.
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |