gpt4 book ai didi

scala - 我如何在 Scala 中拆分充满选项的案例类

转载 作者:行者123 更新时间:2023-12-04 09:04:25 25 4
gpt4 key购买 nike

我对 Scala 很陌生,我仍在努力习惯它的语法和风格,所以这可能是一个非常简单的问题。

我正在使用一个代码库,其中有很多使用选项填充的案例类,如下所示:

case class Person(
pants: Option[Pants]
)
case class Pants(
pocket: Option[Pocket]
)
case class Pocket(
cash: Option[Cash]
)
case class Cash(
value: String = "zilch"
)

在上面的示例中,您将如何返回 Person 中的金额。的 Pants Pocket ,如果他们真的穿着裤子……有口袋,他们有没有钱?

最佳答案

Scalaz 7 发生了一些变化,所以这里是另一个例子:

  object PartialLensExample extends App {

import scalaz._
import Lens._
import PLens._


case class Bar(blub: Option[String])
case class Foo(bar: Option[Bar])

// normal lenses for getting and setting values
val fooBarL: Foo @> Option[Bar] = lensg(foo ⇒ bar ⇒ foo.copy(bar = bar), _.bar)
val barBlubL: Bar @> Option[String] = lensg(bar ⇒ blub ⇒ bar.copy(blub = blub), _.blub)

// compose the above as 'Partial Lenses', >=> is just an alias for 'andThen'
val fooBarBlubL: Foo @?> String = fooBarL.partial >=> somePLens >=> barBlubL.partial >=> somePLens

// try it
val foo = Foo(Some(Bar(Some("Hi"))))

println(fooBarBlubL.get(foo)) // Some(Hi)

println(fooBarBlubL.set(foo, "Bye")) //Foo(Some(Bar(Some(Bye))))

// setting values
val foo2 = Foo(None)
println(fooBarL.set(foo2, Some(Bar(None)))) // Foo(Some(Bar(None)))

}

关于scala - 我如何在 Scala 中拆分充满选项的案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com