我在Scala Play项目中使用了ScalaTest。但是我在这里有一个问题,什么时候使用普通的assert(xxx === yyy)以及什么时候使用ScalaTest匹配器xxx should be yyy。
就我个人而言,我更喜欢使用assert,因为它既简单又干净。也可以利用ScalaTest的TypedCheckTrippleEquals支持,但匹配器则不能。
对于匹配器,到目前为止,我只发现匹配器可以做的一件事,但不能断言,这是Array(1, 2) should equal (Array(1, 2))成功的。
不太确定推荐哪个,匹配器还有其他东西可以做得更多吗?否则很高兴使用断言。
我为 Kotlin 获得了一个简单的数据类
data class Person(val name: String, @get: Min(18) val age: Int)
Run Code Online (Sandbox Code Playgroud)
我实际上从一个 CSV 文件构建了这个类,我使用 apache CSV 解析器读取了 CSV。即使我有一些age字段小于 18 的数据,测试仍然没有通过。
看起来这个注释不适用于 Kotlin?
我有两个方法,两个都返回Future [Either [String,T]],并希望将它们链接在一起以完成工作.我正在使用Scala 2.12现在两者都是正确的偏见.
例如,
如果函数没有返回Future和Either组合,我可以简单地执行以下操作以获得理解.
def convert(a, b) = ???
def callA(): Future[A] = ???
def callB(a: A): Future[B] = ???
def chain: Future[C] = for {
a <- callA
b <- callB(a)
} yield convert(a, b)
Run Code Online (Sandbox Code Playgroud)
但现在我想用以下语法使用Either捕获错误,并传播到最终结果.实现这一目标的最佳方法是什么?还应该使用callB还是callB1?
def convert(a, b): Future[Either[String, C]] = ???
def callA(): Future[Either[String, A]] = ???
def callB(a: A): Future[Either[String, B]] = ??? or
def callB1(eithera: Either[String, A]): Future[Either[String, B]] = ???
Run Code Online (Sandbox Code Playgroud)
我知道使用cat变换monad可以简化这一点.欢迎给我使用标准库和猫的解决方案.
我使用Dotty模板创建了一个基本的Scala Dotty项目,并将该项目导入Intellij IDE。
当我使用sbt命令行时,一切正常。
当我尝试在Intellij IDE中构建或运行它时,出现以下错误:
Error:scalac: Multiple 'scala-library*.jar' files (scala-library-0.9.0-RC1.jar, scala-library-2.12.6.jar) in Scala compiler classpath in Scala SDK sbt: ch.epfl.lamp:dotty-library_0.9:0.9.0-RC1:jar
任何想法如何解决这个问题?
我有一些以下代码并收到变量警告,producer该警告是accessing non-final property in constructor
class KafkaService {
val producer: KafkaProducer<String, String>
init {
val props = Properties()
props[ProducerConfig.BOOTSTRAP_SERVERS_CONFIG] = "127.0.0.1:9092"
props[ProducerConfig.CLIENT_ID_CONFIG] = "DemoProducer"
props[ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG] = StringSerializer::class.java.name
props[ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG] = StringSerializer::class.java.name
producer = KafkaProducer(props)
}
fun sendToKafka(topic: String, message: String) {
val producerRecord: ProducerRecord<String?, String> = ProducerRecord(topic, null, message)
producer.send(producerRecord)
}
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?
例如,我有一个整数列表,如 List(1,2,3,4,5,6,7)
我想在Java 8中获得所有结合3个数字的更多功能,以学习Java 8.(我知道如何以命令的方式完成它)
因此上面的结果可以是列表列表:
List(List(1,2,3), List(2,3,4), List(3,4,5), List(4,5,6), List(5,6,7))
Run Code Online (Sandbox Code Playgroud)
谢谢
对于原生的 Java Kafka 客户端,有一个叫做 Kafka 的配置,enable.idempotence我们可以设置true为启用幂等生产者。
但是,对于 Spring Kafka,我在KafkaProperties课堂上找不到类似的幂等性。
所以我想知道,如果我在我的 Spring Kafka 配置文件中手动设置,这个属性会生效还是 Spring 会完全忽略 Spring Kafka 的这个配置?
我在 Play 应用程序中使用了 sbt-scoverage。
我使用以下配置来排除反向和路由生成的文件。
coverageExcludedPackages := ";Reverse.;Routes.;"
Run Code Online (Sandbox Code Playgroud)
但是,这只能排除生成的反向 scala 文件,而不能排除 Routes 文件。即使我使用以下脚本,它也会做同样的事情
coverageExcludedPackages := ";Routes.*;"
Run Code Online (Sandbox Code Playgroud)
任何人都知道正确的正则表达式应该是什么?
似乎最新版本的ScalaTest我们有两个匹配器Matchers(之前是ShouldMatchers)和MustMatchers.
这两者之间真正的区别是什么?团队可以选择那种风格还是?
另外,shouldBe和之间的任何区别should be
例如,我有跟随Scala列表,我想获得一个子列表,直到有一个要求可以满足.
val list = Seq(1,2,3,4,5,5,4,1,2,5)
Run Code Online (Sandbox Code Playgroud)
要求是数字是5,所以我希望结果如下:
Seq(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
目前我使用Scala集合indexWhere并splitAt返回:
list.splitAt(list.indexWhere(x => x == 5))
(Seq(1,2,3,4), Seq(5,5,4,1,2,5))
Run Code Online (Sandbox Code Playgroud)
我不确定有更好的方法来实现相同的更好的Scala集合的方法,我没有意识到?
scala ×6
kotlin ×2
matcher ×2
scalatest ×2
apache-kafka ×1
dotty ×1
java ×1
java-8 ×1
scoverage ×1
spring ×1
spring-boot ×1
spring-kafka ×1