我经常想记录或打印一些东西而不改变它。
它看起来像这样:
val result = myResult // this could be an Option or a Future
.map{r =>
info(s"the result is $r")
r
}
Run Code Online (Sandbox Code Playgroud)
这三行总是相同的。
在 for 理解中,这可以做得更好一些。
但我正在寻找第一个声明性版本的解决方案。它应该看起来像:
val result = myResult
.log(info(s"the result is ${_}"))
Run Code Online (Sandbox Code Playgroud)
这条单线可以放在链中可能有地图的每个位置,例如:
val result = myResult
.log(info(s"1. ${_}"))
.filter(_ > 1)
.log(info(s"2. ${_}"))
...
Run Code Online (Sandbox Code Playgroud)
如何才能实现这一目标?如果可能的话,没有函数库。
我有以下 ZIO 程序,其中包含两个永久运行的进程:
for {
..
numberProvider <- numberProvider(queue).fork // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但我想知道这是否是好的做法。
有2个问题:
可以吗,在主程序上运行 2. 进程。或者它也应该是Fiber?
我join最终是否必须使用 Fibers,即使它们永远运行,因此永远不会到达join?
for {
..
numberProvider <- numberProvider(queue).fork // runs forever
numberService <- numberService(queue) // runs forever
..
_ <- numberProvider.join // join in any case
} yield ()
Run Code Online (Sandbox Code Playgroud)concurrency functional-programming scala for-comprehension zio
我有几个Booleans我想测试,比如
assert(g8Exists, equalTo(true)) &&
assert(projectExists, equalTo(true)) &&
assert(testenvExists, equalTo(true)) ...
Run Code Online (Sandbox Code Playgroud)
如果一个失败,我得到的只是:
false did not satisfy equalTo(true)
Run Code Online (Sandbox Code Playgroud)
不知道哪条线失败了。有没有办法添加描述性的断言消息。例如:
assert(g8Exists, equalTo(true), "g8Exists")
Run Code Online (Sandbox Code Playgroud)
或首选:
assertTrue(g8Exists, "g8Exists")
Run Code Online (Sandbox Code Playgroud)
会导致
false did not satisfy equalTo(true) - g8Exists
Run Code Online (Sandbox Code Playgroud)
或者有没有更好的测试方法Booleans?
我有以下场景:
case class B(v: String)
case class A(bs: Seq[B])
extension(a: A)
def doit() = a.bs.map(_.doit()) // here is the exception
extension(b: B)
def doit() = println("OK: ${b.v}")
Run Code Online (Sandbox Code Playgroud)
这给了我以下编译异常:
value doit is not a member of B.
An extension method was tried, but could not be fully constructed:
_$1
Run Code Online (Sandbox Code Playgroud)
Scala 3中扩展方法的命名有限制吗?
请参阅Scastie上的示例
我尝试在 Scala 2.13 项目中使用 Scala 3 库。
我得到以下异常:
(class scala.tools.tasty.UnpickleException/TASTy signature has wrong version.
expected: {majorVersion: 28, minorVersion: 0}
found : {majorVersion: 28, minorVersion: 1}
Run Code Online (Sandbox Code Playgroud)
该库使用Scala 3.1。该项目使用Scala 2.13.6,具有以下依赖性:
libraryDependencies += ("io.github.pme123" %% "camundala-api" % "0.1.6").cross(CrossVersion.for2_13Use3)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我找不到兼容性矩阵。我的猜测是,当使用Scala 3.0 时。在图书馆它会起作用。
这个异常意味着什么以及如何修复它?
scalac: Token not found: /Users/mpa/Library/Caches/JetBrains/IntelliJIdea2021.3/compile-server/tokens/54149
Run Code Online (Sandbox Code Playgroud)
我在IntelliJ 2021.3中有一个Scala 3项目:
当使用 IntelliJ 构建项目时,它似乎是随机出现的。
我试过:
sbt clean/sbt compile和sbt reload。.idea文件夹并新打开项目。使用起来sbt效果很好。因此,像这样调整配置是可行的,但我想使用 IntelliJ 的构建:
我想在工具提示中添加换行符:
<span data:data-tooltip="line 1 ...\n
line 2 ...">
Run Code Online (Sandbox Code Playgroud)
我从这里尝试了几个建议: 在工具提示中添加换行符
没有任何效果。我在没有 Javascript 的情况下使用它(v.2.2)
当我从 Intellij 中的包运行测试时(“包”->“运行”->“包”中的 ScalaTests)
@DoNotDiscover还运行了标记为 的测试。
报告了一个问题 ( youtrack.jetbrains.com ),但没有建议解决方法,也没有承诺修复。
有办法让这项工作发挥作用吗?
我试图调用从scala中获取的java方法。List<Class<?>>
编译失败并显示
type mismatch;
found : java.util.List[Class[T]] where type T <: Person.type
required: java.util.List[Class[_]]
Run Code Online (Sandbox Code Playgroud)
我尝试使用JavaConverters,但收到相同的错误。
Java方法:
void registerClasses(List<Class<?>> var1);
Run Code Online (Sandbox Code Playgroud)
从Scala致电:
def registerEntities() = registry.registerClasses(List(Person.getClass).asJava)
Run Code Online (Sandbox Code Playgroud)