像这样的方法传递更惯用的Scala吗ExecutionContext
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世界中通常更受欢迎,是因为它引起较少的惊喜,更易于阅读或其他原因?如果可能,请提供一些参考。
我刚刚使用 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)
inThisBuild内settings是什么意思(第 3 行)?我通常在build.sbt文件的根级别看到它,而不是在settings. 它与根本没有inThisBuild(例如name,libraryDependencies在上面的文件中)有什么不同?
我正在尝试测试一些代码,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 代码。在类/对象级别有一个隐式定义,我想用方法中定义的隐式“覆盖”它。(如果您真的需要知道,我需要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 不能在隐式类范围和隐式方法范围之间进行选择。
假设我将类型a定义为类型元组
type a = (Int, String, Int)
Run Code Online (Sandbox Code Playgroud)
我将泛型类定义Foo为
class Foo[A]{}
Run Code Online (Sandbox Code Playgroud)
是否有任何方法是 Scala(最好是原生 Scala)可以转换a为b泛型类型的元组?
type b = (Foo[Int], Foo[String], Foo[Int])
Run Code Online (Sandbox Code Playgroud)