【问题标题】:How to interpret a val in Scala that is of type Option[T]如何在 Scala 中解释 Option[T] 类型的 val
【发布时间】:2015-05-03 03:20:13
【问题描述】:

我正在尝试分析其他人编写的 Scala 代码,并且在此过程中,我希望能够编写单元测试(不幸的是,在编写代码之前没有编写单元测试)。 作为 Scala 的相对新手,尤其是在 Futures 概念领域,我试图理解以下代码行。

val niceAnalysis:Option[(niceReport) => Future[niceReport]] = None


更新: 上面的代码行应该是:

val niceAnalysis:Option[(NiceReport) => Future[NiceReport]] = None


- NiceReport 是一个案例类


------------更新到此结束----------------

因为我试图模拟一个 Actor,所以我创建了这个新的 Actor,我将我的 niceAnalysis val 作为一个字段引入。 我看到这个“niceAnalysis”的第一个问题是它看起来像一个匿名函数。 我如何“初始化”这个 val,或者给它一个初始值。
我的目标是在我的测试类中创建一个测试,我将在其中将此初始化的 val 值传递给我的测试参与者的接收方法。


我实现这一点的天真方法如下:

val myActorUnderTestRef = TestActorRef(new MyActorUnderTest("None))


IntelliJ 也不喜欢它。我的 SBT 编译和测试失败。

所以,我需要先了解“niceAnalyis”声明,然后了解如何赋予它一个初始值。请指教。

【问题讨论】:

    标签: scala


    【解决方案1】:

    您说得对,这是一个可能包含从niceReportFuture[niceReport] 类型的函数的值。您可以传递匿名函数或仅传递函数指针。最容易理解的可能是指针,所以我将首先提供它,但从长远来看,最简单的可能是匿名函数,我将在第二个展示:

    import scala.concurrent.Future
    import scala.concurrent.ExecutionContext.Implicits.global
    
    def strToFuture(x: String) = Future{ x } //merely wrap the string in a future
    val foo = Option(strToFuture)
    

    反之,一个班轮如下:

    val foo = Option((x:String)=>Future{x})
    

    【讨论】:

    • 这是有道理的。我现在要试试这个
    • 我发布了我的问题的更新,因为我刚刚意识到我忘了提及其他细节。
    • 这不会改变我的答案。我使用了 String,但你可以使用任何类型,包括 NiceReport。
    • 感谢您的确认。非常及时。清晰的解释。
    猜你喜欢
    • 2015-10-09
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2015-02-27
    • 2021-12-23
    • 2021-01-03
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多