假设我已经Group通过所有组操作定义了一个特征。是否可以创建一个包装器AGroup而Group无需手动派生其所有操作?
基本上,我想要这个:
#[derive (Copy, Debug, Clone, Eq, PartialEq, Group)] // How could I derive Group here as well?
struct AGroup<G: Group>(G);
Run Code Online (Sandbox Code Playgroud)
没有所有这些样板:
impl<G: Group> Add for AGroup<G>{
type Output = AGroup<G>;
fn add(self, other: Self) -> Self {
AGroup(self.0 + other.0)
}
}
impl<G: Group> Neg for AGroup<G>{
type Output = AGroup<G>;
fn neg(self) -> Self {
AGroup(-self.0)
}
}
...
Run Code Online (Sandbox Code Playgroud) 我有一份 json 格式的成绩单,里面有一堆单词
{
"words": [{
"duration": 123,
"name": "world"
"time": 234,
"speaker": null
}]
}
Run Code Online (Sandbox Code Playgroud)
我一直在使用 Circe 来编码/解码 Json。在这种特殊情况下:
import io.circe.generic.auto._
import io.circe.parser._
val decoded = decode[Transcript](transcriptJson)
Run Code Online (Sandbox Code Playgroud)
我的 ADT 看起来像:
case class Word(
duration: Double,
name: String,
time: Float,
para: String,
speaker: Option[String],
key: Option[String] = None,
strike: Option[String] = None,
highlight: Option[String] = None
)
case class Transcript(words: List[Word])
Run Code Online (Sandbox Code Playgroud)
有时单词有像“strike”或“highlight”这样的键,但很可能没有。如果没有,我会收到以下错误消息。
Left(DecodingFailure([A]List[A], List(DownField(highlight), MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, …Run Code Online (Sandbox Code Playgroud)