为什么在磨机上运行ZIO App无效?

时间:2019-07-17 18:42:58

标签: scala scalaz-zio mill

我从zio.dev设置了简单的ZIO应用。

val myAppLogic =
    for {
      _    <- putStrLn("Hello! What is your name?")
      name <- getStrLn
      _    <- putStrLn(s"Hello, ${name}, welcome to ZIO!")
    } yield ()

当在 Intellij 中运行时,按预期运行。

但是用 mill 运行它却没有。

nbszmbp012:zio-scala-camunda-bot mpa$ mill server.run
[27/37] server.compile 
[info] Compiling 1 Scala source to /Users/mpa/dev/Github/pme123/zio-scala-camunda-bot/out/server/compile/dest/classes ...
[info] Done compiling.
[37/37] server.run 
Hello! What is your name?
Peter

name <- getStrLn未执行。

这里是build.sc

import mill._, scalalib._

object server extends ScalaModule {
  def scalaVersion = "2.12.8"
  def ivyDeps = Agg(
    ivy"dev.zio::zio:1.0.0-RC10-1",
    ivy"com.bot4s::telegram-core:4.3.0-RC1"
  )
}

我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

默认情况下,Mill在客户端-服务器模式下运行。结果之一是,构建任务无法消耗输入流。

您给出的示例需要从过程标准输入中读取。因此,您必须明确告知mill以--interactive(或简称为-i)在交互式模式下运行。

$ mill -i server.run
[27/37] server.compile 
[info] Compiling 1 Scala source to /tmp/zio-q/out/server/compile/dest/classes ...
[info] Done compiling.
[37/37] server.run 
Hello! What is your name?
Peter
Hello, Peter, welcome to ZIO!

当使用附加的-i(在任务名称之前)调用时,ZIO应用程序可以正确地从STDIN读取并打印问候语。