【问题标题】:For iteration on scalatra input对于 scalatra 输入的迭代
【发布时间】:2013-12-23 17:42:37
【问题描述】:

我正在尝试以以下方式使用迭代读取 scalatra webapp 中的输入

for (
         input1<- params.getOrElse("input1", "");
         input2 <- params.getOrElse("input2", "");
         search <- params.getOrElse("search", false)
    ) {
       //Perform action
    }

foreach is not a member of Object 抛出错误值。

如果用户没有提供任何输入,它应该默认为空字符串并调用操作而不是跳出循环。出于这个原因,我正在使用 getOrElse。但是我没有成功。

有什么帮助吗?

【问题讨论】:

  • params的类型是什么?我猜这是一个Map[String, Something],所以你应该用val input1 = params.getOrElse(...)input2search相同)替换input1 &lt;- params.getOrElse(...)并删除for,但你会得到Any类型的值,因为你是在getOrElseStringBoolean)中使用不同的类型。

标签: scala scalatra


【解决方案1】:

您可以使用 for-comprehensions 来处理 Option,但不能将它用于至少没有定义一个 foreachmapflatMap 的对象。在您的情况下,如果 params 正在返回选项,那么...

for(
  input1 <- params get "input1"
  input2 <- params get "input2"
 ){
   //do stuff
 }

如果inputinput2 都不是None,这将不会运行。

如果您不想让控制逻辑短路,并且希望Option 返回有合理的默认值,那么更好的方法就是这样做

 myFunction(params getOrElse ("input1", "default1"), params getOrElse ("input2", 42))

您明确提供默认值并将它们传递给函数调用。

【讨论】:

  • 你不认为val input1 = params.getOrElse("input1", "")是OP想要的吗?
  • @senia 不。他正在对结果进行副作用操作。传入函数后,无需存储值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2013-02-20
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多