小编kri*_*ath的帖子

Scala ExecutionContext作为类或方法参数是否更惯用?

像这样的方法传递更惯用的ScalaExecutionContext

class Foo {
    def bar(a: Int, b: Int)(implicit ec: ExecutionContext): Future[Int] = {
        Future(a + b)
    }

    def baz(a: Int, b: Int)(implicit ec: ExecutionContext): Future[Int] = {
        Future(a - b)
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更好地通过ExecutionContext每个班级

class Foo(implicit ec: ExecutionContext) {
    def bar(a: Int, b: Int): Future[Int] = {
        Future(a + b)
    }

    def baz(a: Int, b: Int): Future[Int] = {
        Future(a - b)
    }
}
Run Code Online (Sandbox Code Playgroud)

是一种样式在Scala世界中通常更受欢迎,是因为它引起较少的惊喜,更易于阅读或其他原因?如果可能,请提供一些参考。

scala future executioncontext

2
推荐指数
1
解决办法
43
查看次数

settings(inThisBuild(...)) 在 sbt 中是什么意思?

我刚刚使用 scalaxb 模板生成了一个 sbt 项目:

sbt new eed3si9n/scalaxb.g8
Run Code Online (Sandbox Code Playgroud)

我得到了这个build.sbt文件:

lazy val root = (project in file(".")).
  enablePlugins(ScalaxbPlugin).
  settings(inThisBuild(List(
    organization  := "com.example",
    scalaVersion  := "2.13.2",
    crossScalaVersions := Seq("2.13.2", "2.12.12")
  ))).
  settings(
    name          := "test-scalaxb",
    libraryDependencies ++= Seq(dispatch, scalaXml, scalaParser)
  ).
  settings(
    scalaxbDispatchVersion in (Compile, scalaxb) := dispatchV,
    scalaxbPackageName in (Compile, scalaxb)     := "generated"
  )
Run Code Online (Sandbox Code Playgroud)

inThisBuildsettings是什么意思(第 3 行)?我通常在build.sbt文件的根级别看到它,而不是在settings. 它与根本没有inThisBuild(例如namelibraryDependencies在上面的文件中)有什么不同?

sbt

2
推荐指数
1
解决办法
370
查看次数

使用 Mockito 监视带有对象参数的方法导致 NullPointerException

我正在尝试测试一些代码,Mockito.spy用于为我需要提供的某些功能提供行为。虽然我知道我正在做的事情可能有更好的替代方案,但我很好奇为什么下面的代码NullPointerException在 Scala 中抛出 a以及如何解决它。

该类Foo正在测试中。它包含一个方法act,就这个问题而言,它只计算数字的总和。ClassFooSpec是class的相应单元测试Foo。ClassBar是另一个类,用作 class 的参数Foo以演示出现异常的情况。

以下代码有效。方法不Foo.act接受任何参数。

package foo

import org.mockito.Matchers.any
import org.mockito.Mockito.{spy, times, verify, when}
import org.scalatest.WordSpec
import org.scalatest.mockito.MockitoSugar

class Foo {
  def act(): Int = {
    (1 to 10).sum
  }
}

class FooSpec extends WordSpec with MockitoSugar {
  "a test" in {
    val spiedFoo = spy(new Foo)
    when(spiedFoo.act()).thenReturn(100)

    val result = spiedFoo.act()

    assert(result == 100)
    verify(spiedFoo, times(1)).act() …
Run Code Online (Sandbox Code Playgroud)

scala nullpointerexception mockito scalatest

1
推荐指数
1
解决办法
2660
查看次数

如何在方法范围内比类范围更喜欢隐式?

我有一个类似于下面的代码的 Scala 代码。在类/对象级别有一个隐式定义,我想用方法中定义的隐式“覆盖”它。(如果您真的需要知道,我需要ExecutionContext专门针对所讨论的方法更改我的内容)。

在这个例子中,我想在方法的范围内b用作隐式 for 。我怎样才能做到这一点?Intbar

object Foo {
  implicit val a: Int = 1
  def bar: Int = { // Didn't pass implicit Int parameter
    implicit val b: Int = 2
    implicitly[Int]
  }
}
Run Code Online (Sandbox Code Playgroud)

这抱怨

错误:不明确的隐式值:Int 类型的对象 Foo 中的值 a 和 Int 类型的值 b 均匹配预期的 Int 类型

所以我认为 Scala 不能在隐式类范围和隐式方法范围之间进行选择。

scala implicit

1
推荐指数
1
解决办法
62
查看次数

Scala将类型元组转换为类型泛型元组

假设我将类型a定义为类型元组

type a = (Int, String, Int)
Run Code Online (Sandbox Code Playgroud)

我将泛型类定义Foo

class Foo[A]{}
Run Code Online (Sandbox Code Playgroud)

是否有任何方法是 Scala(最好是原生 Scala)可以转换ab泛型类型的元组?

type b = (Foo[Int], Foo[String], Foo[Int])
Run Code Online (Sandbox Code Playgroud)

generics types scala

0
推荐指数
1
解决办法
118
查看次数