Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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将平滑结果保存到新对象中_Scala_Playframework_Playframework 2.0_Slick - Fatal编程技术网

scala将平滑结果保存到新对象中

scala将平滑结果保存到新对象中,scala,playframework,playframework-2.0,slick,Scala,Playframework,Playframework 2.0,Slick,有没有办法将光滑查询的结果保存到新对象中 这是我巧妙的结果,列表中只有一个“对象” val result: Future[Seq[ProcessTemplatesModel]] = db.run(action) 结果应该映射到ProcessTemplatesModel上,因为我希望像这样访问值 process.title 这可能吗 谢谢TL;DR:您应该尽可能长时间地保留上下文 Future表示值将在将来某个时间给出(这就是我所说的值的上下文) 使用它的坏方法是阻塞线程,直到找到这样的值,然

有没有办法将光滑查询的结果保存到新对象中

这是我巧妙的结果,列表中只有一个“对象”

val result: Future[Seq[ProcessTemplatesModel]] = db.run(action)
结果应该映射到ProcessTemplatesModel上,因为我希望像这样访问值

process.title
这可能吗


谢谢

TL;DR:您应该尽可能长时间地保留上下文

Future
表示值将在将来某个时间给出(这就是我所说的值的上下文)

使用它的坏方法是阻塞线程,直到找到这样的值,然后使用它

更好的方法是告诉您的程序:“一旦找到值(无论何时),就用它做点什么”。这是一个延续或回调,在scala中通过
map
flatMap
实现

Seq
是您价值的另一个上下文。这意味着您实际上有不同的可能值。如果要确保最多有一个值,可以始终执行
seq.headOption
将上下文从
seq
切换到
Option

使用它的坏方法是在不检查第一个值是否存在的情况下获取第一个值

一个更好的方法是告诉你的程序:“不管你有多少价值观,都要为每一个价值观这样做”

现在,您如何在上下文中工作?使用函子和/或单子运算符:
map
flatMap

例如,如果要将函数
convertToSomethingElse
应用于上下文的每个元素,只需执行以下操作

result.map(list => list.map(process => convertToSomethingElse(process))
您将得到一个
未来[Seq[SomethingElse]]

另一个例子是,如果要将结果保存到其他地方,可能需要一些IO或数据库操作,这可能需要一些时间,并且可能会失败。我们假设您有一个函数
save(entity:ProcessTemplateModel):Future[Boolean]
,允许您保存一个模型。函数将花费一些时间(并且将在另一个线程中启动)并且可能失败的事实在返回类型
Future[Boolean]
中是可见的(
Boolean
在这里并不重要,重要的是我们再次拥有
Future
上下文)

在这里,您必须执行以下操作(假设您只想保存列表中的第一个元素):

正如你所看到的,我们可以做我们想做的大部分事情,只需停留在Slick返回的上下文中。你不应该想离开他们,因为

  • 大多数情况下,当您有
    map
    在上下文内部使用一些函数来处理上下文外部的值时,没有必要这样做
  • 提取方法在大多数情况下是不安全的:
    选项#get
    如果
    选项中没有元素,则抛出异常,
    等待。结果(未来、持续时间)
    可能会阻止所有计算或抛出异常
  • 游戏中的反应!可以使用
    Action.async在控制器中以
    Future
    s的形式给出

    • TL;DR:您应该尽可能长时间地保留上下文

      Future
      表示值将在将来某个时间给出(这就是我所说的值的上下文)

      使用它的坏方法是阻塞线程,直到找到这样的值,然后使用它

      更好的方法是告诉您的程序:“一旦找到值(无论何时),就用它做点什么”。这是一个延续或回调,在scala中通过
      map
      flatMap
      实现

      Seq
      是您价值的另一个上下文。这意味着您实际上有不同的可能值。如果要确保最多有一个值,可以始终执行
      seq.headOption
      将上下文从
      seq
      切换到
      Option

      使用它的坏方法是在不检查第一个值是否存在的情况下获取第一个值

      一个更好的方法是告诉你的程序:“不管你有多少价值观,都要为每一个价值观这样做”

      现在,您如何在上下文中工作?使用函子和/或单子运算符:
      map
      flatMap

      例如,如果要将函数
      convertToSomethingElse
      应用于上下文的每个元素,只需执行以下操作

      result.map(list => list.map(process => convertToSomethingElse(process))
      
      您将得到一个
      未来[Seq[SomethingElse]]

      另一个例子是,如果要将结果保存到其他地方,可能需要一些IO或数据库操作,这可能需要一些时间,并且可能会失败。我们假设您有一个函数
      save(entity:ProcessTemplateModel):Future[Boolean]
      ,允许您保存一个模型。函数将花费一些时间(并且将在另一个线程中启动)并且可能失败的事实在返回类型
      Future[Boolean]
      中是可见的(
      Boolean
      在这里并不重要,重要的是我们再次拥有
      Future
      上下文)

      在这里,您必须执行以下操作(假设您只想保存列表中的第一个元素):

      正如你所看到的,我们可以做我们想做的大部分事情,只需停留在Slick返回的上下文中。你不应该想离开他们,因为

      • 大多数情况下,当您有
        map
        在上下文内部使用一些函数来处理上下文外部的值时,没有必要这样做
      • 提取方法在大多数情况下是不安全的:
        选项#get
        如果
        选项中没有元素,则抛出异常,
        等待。结果(未来、持续时间)
        可能会阻止所有计算或抛出异常
      • 游戏中的反应!可以使用
        Action.async在控制器中以
        Future
        s的形式给出

      您确定列表中始终有一个对象吗?没有吗?你想把结果用在戏剧中吗!控制器?为什么?