Scala中for推导式`_ <- func1()`语句的作用解析
关于Scala for推导式中
_ <- func1()的作用解析 针对你提出的问题,直接拆解说明:
是func2()的执行闸门:没错,for推导式是按顺序执行的。不管
func1()抛出普通异常,还是返回一个代表失败的monad实例(比如Future.failed、Either.Left),后续的func2()都不会执行。只有当func1()成功完成(正常返回对应monad的成功值,比如Future.success、Either.Right),才会进入下一行执行func2()。正常情况下会丢弃func1()的返回值:
_这个占位符就是明确告诉编译器,我们不需要使用func1()的返回结果,所以它的返回值会被直接忽略,不会传递给后续的推导步骤。不止是简单的“调用并丢弃”:要注意这不是普通的函数调用后丢值,而是在monad上下文里的顺序依赖执行。比如如果
func1()和func2()返回Future,func2()会在func1()的Future完成且成功后才开始执行;如果是Option类型,只有func1()返回Some时,func2()才会被调用。
内容的提问来源于stack exchange,提问作者DFL
相关产品推荐
相关产品推荐

