我有 2 个用 C# 和 Scala 编写的 deflate 函数,当使用相同的输入运行时,返回的字节数组在前导字节和尾随字节中存在差异(中间字节之间的差异是由无符号/有符号字节机制预期的) C# 和 Scala)。
\nScala 中的 Deflate 函数:
\nimport java.io.ByteArrayOutputStream\nimport java.util.zip.{Deflater, DeflaterOutputStream}\n\nimport zio._\n\n\nobject ZDeflater {\n val deflater = ZManaged.makeEffectTotal(new Deflater(Deflater.DEFLATED, true))(_.end)\n\n val buffer = ZManaged.fromAutoCloseable(ZIO.succeed(new ByteArrayOutputStream()))\n\n val stream = for {\n d <- deflater\n b <- buffer\n s <- ZManaged.fromAutoCloseable(ZIO.succeed(new DeflaterOutputStream(b, d, true)))\n } yield (b, s)\n\n def deflate(input: Array[Byte]): RIO[blocking.Blocking, Array[Byte]] = stream.use { case (buffer, stream) =>\n for {\n () <- blocking.effectBlocking(stream.write(input))\n () <- blocking.effectBlocking(stream.flush())\n result = buffer.toByteArray\n …
Run Code Online (Sandbox Code Playgroud) 我有一个带有多个 case 类的密封 trait 实现,每个 case 类都有自己的参数,其中一些具有相同类型的参数(我想提取,在这种情况下Trigger
:),其中一些没有。
sealed trait Event
object MyTrait {
final case class EventA(context: Context) extends Event
final case class EventB(trigger: Trigger) extends Event
final case class EventC(trigger: Trigger) extends Event
final case class EventD(trigger: Option[Trigger] = None) extends Event
...
final case class EventZ(factor: Factor) extends Event
}
Run Code Online (Sandbox Code Playgroud)
逻辑流程处理如下:
event match {
case ev @(_: Event.EventA | _: Event.EventB |
_: Event.EventC | _: Event.EventD) =>
val amount = for {
count1 <- countThis …
Run Code Online (Sandbox Code Playgroud)