У меня есть эта строка кода, где я использую наиболее идиоматических способ я знаю, для уничтожения того объекта возвращается из функции:Scala экстремальное разрушение?
val (a, b) = foo match { case MyObjectType(a, b) => (a, b) }
объекта прототипа являются:
case class MyObjectType(Type1: SomeType1, Type2: SomeType2)
Конечно В противном случае я мог бы:
val returnType = foo
val (a, b) = (returnType.a, returnType.b)
Но последнее - это совсем другая форма постановки одной и той же проблемы - это действительно не изящно. Мог ли макрос 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
Спасибо, что это лучше, чем кортеж, я думал о кортеже только потому, что думал, что решение пройдет через один, но это выполнит свою работу! Интересно, как это работает под капотом, хотя ... Ответ на этот ответ был действительно плохим ответом на него BTW. Это решение гораздо более полезно, но я удивляюсь, почему он работает, если вы хотите сделать это. – matanster