Rust's try!
宏解开Result
s。 Ok
值被解包; Err
导致封装方法立即返回Err
。这里实现:https://doc.rust-lang.org/std/macro.try!.html等同于Rust的尝试!宏Scala
这大致相当于斯卡拉Option.getOrElse(return None)
。
是否有可能在Scala中为Option
s写等价宏?看来宏需要检查封闭方法的返回类型是Option
。我在这里找到了一些相关的讨论:https://groups.google.com/forum/#!topic/scala-user/BH0xz74f4Zk如果是这样,怎么办?
这将是非常好的。也许可以概括为展开其他类型,如Future
和Try
。这比有效的项目完成的效果要弱但类似:https://github.com/pelotom/effectful。实际上,我想你可以用效果很好但有效的方式来实现,要求整个块被包含在宏中,而try!
使用return
来允许更多的本地语法,这是更好的。
是的我想要一个宏。 Rust的'try!'让我们可以用很少的语法开销展开值 - 无缩进。我想在Scala中模拟同样的事情。 – tksfz