小编pme*_*pme的帖子

如何在 Scala 中进行 Monadic 日志记录

我经常想记录或打印一些东西而不改变它。

它看起来像这样:

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)

如何才能实现这一目标?如果可能的话,没有函数库。

monads functional-programming scala

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

ZIO:如何加入 Fibers 以实现永久运行的流程

我有以下 ZIO 程序,其中包含两个永久运行的进程:

    for {
      ..
      numberProvider <- numberProvider(queue).fork  // runs forever
      numberService <- numberService(queue)         // runs forever
      ..
    } yield ()
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我想知道这是否是好的做法。

有2个问题:

  1. 可以吗,在主程序上运行 2. 进程。或者它也应该是Fiber

  2. 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

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

有没有办法在布尔 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

scala zio zio-test

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

2 不同类中具有相同名称的扩展方法在 Scala 3 中不起作用?

我有以下场景:

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上的示例

extension-methods scala dotty scala-3

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

在 Scala 2.13 项目中使用 Scala 3 库

我尝试在 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 时。在图书馆它会起作用。

scala sbt scala-3

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

scalac:找不到令牌:/Users/mpa/Library/Caches/JetBrains/IntelliJIdea2021.3/compile-server/tokens/54149

这个异常意味着什么以及如何修复它?

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 compilesbt reload
  • 关闭 IntelliJ/删除.idea文件夹并新打开项目。

使用起来sbt效果很好。因此,像这样调整配置是可行的,但我想使用 IntelliJ 的构建:

项目配置sbt

scala intellij-idea sbt scala-3

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

Semantic-UI:在工具提示中添加换行符

我想在工具提示中添加换行符:

<span data:data-tooltip="line 1 ...\n 
                              line 2 ...">
Run Code Online (Sandbox Code Playgroud)

我从这里尝试了几个建议: 在工具提示中添加换行符

没有任何效果。我在没有 Javascript 的情况下使用它(v.2.2)

css semantic-ui

5
推荐指数
2
解决办法
6703
查看次数

特拉维斯:我们找不到存储库

我添加了一个新的Github回购。Travis向我显示了此页面: 在此处输入图片说明

列出所有其他回购。

是否有等待时间,我错过了什么还是必须提出问题?

github travis-ci

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

Intellij 不会忽略带 @DoNotDiscover 注释的测试

当我从 Intellij 中的包运行测试时(“包”->“运行”->“包”中的 ScalaTests)

@DoNotDiscover还运行了标记为 的测试。

报告了一个问题 ( youtrack.jetbrains.com ),但没有建议解决方法,也没有承诺修复。

有办法让这项工作发挥作用吗?

scala intellij-idea scalatest

5
推荐指数
0
解决办法
127
查看次数

如何从Scala调用参数为List &lt;Class &lt;?&gt;&gt;的Java方法

我试图调用从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)

java generics scala

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