Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 2.10期货与SBT中的readLine_Scala_Future - Fatal编程技术网

Scala 2.10期货与SBT中的readLine

Scala 2.10期货与SBT中的readLine,scala,future,Scala,Future,我真的很喜欢Scala 2.10中新的FutureAPI,我正试图用它来编写一个简单的脚本。该计划的要点如下: 对某个URL的HTTP请求 根据响应需要用户输入 深加工 我们的想法是将所有东西都作为一个未来链(flatmap等)来实现,但我的问题是: 我目前正在SBT中进行测试,所以当主线程完成时,SBT将返回其REPL。同时,我的未来计算仍在等待用户输入。一旦我开始尝试输入,步骤2中的readLine调用似乎正在与SBT试图执行的任何输入进行斗争 例如,如果我的预期输入是abcdefghijk

我真的很喜欢Scala 2.10中新的
Future
API,我正试图用它来编写一个简单的脚本。该计划的要点如下:

  • 对某个URL的HTTP请求
  • 根据响应需要用户输入
  • 深加工
  • 我们的想法是将所有东西都作为一个未来链(flatmap等)来实现,但我的问题是:

    我目前正在SBT中进行测试,所以当主线程完成时,SBT将返回其REPL。同时,我的
    未来
    计算仍在等待用户输入。一旦我开始尝试输入,步骤2中的
    readLine
    调用似乎正在与SBT试图执行的任何输入进行斗争

    例如,如果我的预期输入是
    abcdefghijklmnop
    ,我的程序将收到其中的一个随机子集,如
    adghip
    ,然后当它完成时,SBT将告诉我
    bcefjklmno
    不是命令

    我怎么能

  • 延迟主线程在未来守护进程线程之前完成
  • 读线
    替换为不会与SBT发生冲突的其他调用

  • 使用
    scala.concurrent.Await
    ()。也许下面的草图就是你要找的

    导入scala.concurrent.Future
    导入scala.concurrent.ExecutionContext_
    导入scala.concurrent.duration.duration
    导入scala.concurrent.duration_
    导入scala.concurrent.Await
    导入java.util.concurrent.Executors.newScheduledThreadPool
    对象测试{
    隐式val executor=fromExecutorService(newScheduledThreadPool(10))
    val超时=30秒
    def main(参数:数组[字符串]){
    瓦尔f=
    //发出HTTP请求,这将产生一个字符串(比如);这里模拟如下
    未来[字符串]{
    线程。睡眠(1000)
    “答复”
    }.
    //读取输入
    地图{
    响应=>
    println(“请说明您的问题:”)
    val ln=readLine()//注意:这是阻塞。
    (答复,ln)
    }.
    //进一步加工
    地图{
    案例(响应、输入)=>
    println(“响应:+Response+”,输入:+input)
    }
    等待。准备就绪(f,超时)
    }
    }
    
    Ahh,也许可以回答我的问题。我会把这件事留着,直到我因为不善于搜索而感到很难过。