我对Scala很新,所以请保持温柔.
在我正在构建的应用程序中,我正在使用Akka演员,我想编写一些单元测试.我找到了为Akka演员编写单元测试的官方文档
但我无法确切地知道它应该如何运作.特别是,
val actorRef = TestActorRef(new MyActor)
// hypothetical message stimulating a '42' answer
val future = actorRef ? Say42
val Success(result: Int) = future.value.get
result must be(42)
Run Code Online (Sandbox Code Playgroud)
当我尝试的时候,我得到了not found: value Success,这并不奇怪.
然后我找到了如何测试Scala actor的示例
val actorRef = TestActorRef[TickTock]
implicit val timeout = Timeout(5 seconds)
val future = (actorRef ? new Tick("msg")).mapTo[String]
val result = Await.result(future, timeout.duration)
Assert.assertEquals("processed the tick message", result)
Run Code Online (Sandbox Code Playgroud)
诚然,这可能是旧的,但它很容易理解,更接近我通常使用的时候,我想使用期货,最重要的是工作.它确实需要我声明一些像ActorSystem,超时等这样的暗示,这似乎不是官方方式的情况......
如果可能的话,我想使用官方文档提出的方法,所以如果有人能帮助我了解它是如何工作的(尤其是Success位)以及如何使用它,我将不胜感激.
在 Rust 中,有没有办法使用traits 和impls 来(递归地)展平元组?
如果有帮助的话,可以使用 N 个嵌套对的东西是一个好的开始
trait FlattenTuple {
fn into_flattened(self) -> /* ??? */
}
// such that
assert_eq!((1, (2, 3)).into_flattened(), (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)
如果可以扩展任何类型的嵌套元组的工作,那就更好了:
assert_eq!(((1, 2), 2, (3, (4, 5))).into_flattened(), (1, 2, 2, 3, 4, 5))
Run Code Online (Sandbox Code Playgroud) 在Rust中,有没有办法在类型级别Add通过使用LHS(Self)和RHS类型召唤一个实现来使用它的Output类型(例如,泛型函数的返回类型)?
给定一对case类,Source并且Target,它们具有嵌套的case类,并且在每个嵌套级别,其中的字段Target都是未对齐的子集Source,是否有办法将通用的无Shape转换变换Source为Target?
例如,给定以下Internal和External类:
object Internal {
case class User(
firstName: String,
lastName: String,
isAdmin: Boolean,
address: Address
)
case class Address(
street: String,
country: String,
blacklisted: Boolean
)
}
object External {
// Note that isAdmin is missing and the fields are jumbled
case class User(
lastName: String,
firstName: String,
address: Address
)
// blacklisted is gone
case class Address(
street: String,
country: String
) …Run Code Online (Sandbox Code Playgroud) scala generic-programming typeclass type-level-computation shapeless
我目前有一个仅在编译时需要依赖的SBT子项目,因此我认为这是一个使用的好地方,intransitive因此使用它的项目不需要下载该依赖项.
但是,根据SBT参考手册:
在某些情况下,您可能会发现为项目列出的依赖项不是构建它所必需的.例如,使用Felix OSGI框架的项目仅明确要求其主jar进行编译和运行.避免使用intransitive()或notTransitive()获取工件依赖项
措辞有点令人困惑,因为它不鼓励使用transitive()或notTransitive()不解释为什么或何时(一直?).
在Cats或Scalaz中是否存在可在不同容器类型之间进行转换的类型类?例如
似乎FunctionK/ ~>/ NaturalTransformation可能是我正在寻找的,但没有任何实例为他们定义,我不知道为什么.