mat*_*ter 2 macros scala destructuring
我有这行代码,我使用我所知道的最惯用的方式来解析从函数返回的对象:
val (a, b) = foo match { case MyObjectType(a, b) => (a, b) }
Run Code Online (Sandbox Code Playgroud)
该对象的原型是:
case class MyObjectType(Type1: SomeType1, Type2: SomeType2)
Run Code Online (Sandbox Code Playgroud)
当然我可以:
val returnType = foo
val (a, b) = (returnType.a, returnType.b)
Run Code Online (Sandbox Code Playgroud)
但后者则是说明同一问题的另一种形式 - 这实际上并不优雅.一个Scala宏可以拯救提供一个简洁的成语吗?也许允许语法如下:
val (a, b) = foo deconstruct { MyObjectType(a, b) => (a, b) } // merely more shorthand, like scala allows e.g. within a map block
val (a, b) = tuplize(foo) // assumes tuplize can iterate the vals of MyObjectType
tupleResult(a, b) = foo // radical macro api exploring the limits of macro safety...
tupledVars(foo) // macro extreme
Run Code Online (Sandbox Code Playgroud)
一种答案,但这不会给你一个元组.你知道这有用吗:
val MyObjectType(a,b) = foo
此外,如果您正在解构varargs T*,您可以执行如下代码:
val Array(first, second, _*) = Array(1,2,3,4)
val Array(fst, snd, _*) = Array(1,2)
Run Code Online (Sandbox Code Playgroud)
如果你想直接看到元组在Scala中,是否有一种简单的方法将case类转换为元组?