我发现Scala总是对任何东西都有"自然的解释".总是像"哦,但这只是一个函数被调用此函数和该对象与此参数".从某种意义上说,我们从其他语言中知道它并不是真正的编译器魔法.
我的问题是在以下代码中使用的< -运算符:
for(i <- 0 to 10) println(i)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我可以看到它被重写为:
0.to(10).foreach((i:Int)=>println(i))
Run Code Online (Sandbox Code Playgroud)
但这并没有解释我如何进入foreach函数内的匿名函数.在你写i的时候,它不是一个对象,也不是一个声明的变量.那是什么呢,它是如何被带到foreach的内部的呢?
我的猜测是,我终于发现了一些实际上是编译魔术的东西
谢谢你的时间.
为了澄清,我的问题是:如何做的< -在代码的第一线操作人员的工作,因为我不上它可作为函数调用的对象.
在下面的示例中,我得到了例外 java.util.NoSuchElementException: Future.filter predicate is not satisfied
我想Future( Test2 )在检查if( i == 2 )失败时获得结果.我如何处理过滤器/如果处理组成期货的理解?
下面是一个在Scala REPL中工作的简化示例.
码:
import scala.concurrent.Future
import scala.util.{ Try, Success, Failure }
import scala.concurrent.ExecutionContext.Implicits.global
val f1 = Future( 1 )
val f2 = for {
i <- f1
if( i == 2 )
} yield "Test1"
f2.recover{ case _ => "Test2" }
f2.value
Run Code Online (Sandbox Code Playgroud)