我正在尝试创建类似于Scala库中的类型的Tuple,只使用:+方法通过添加N + 1st值将元组扩展为元组 - 这样我将能够递归地构造元组:
class Test {
abstract class Tuple {
//protected type Next[_] <: Tuple
//def :+[T](p: T): Next[T]
}
case class Tuple0() extends Tuple {
protected type Next[T] = Tuple1[T]
def :+[T](p: T): Next[T] = Tuple1(p)
}
case class Tuple1[+T1](p1: T1) extends Tuple {
protected type Next[T] = Tuple2[T1, T]
def :+[T](p: T): Next[T] = Tuple2(p1, p)
}
case class Tuple2[+T1, +T2](p1: T1, p2: T2) extends Tuple {
protected type Next[-T] = Nothing
def :+[T](p: T): Next[T] …
Run Code Online (Sandbox Code Playgroud) 我有一段代码,代码如下:
val e2 = for (e <- elements if condition(expensiveFunction(e))) yield {
expensiveFunction(e)
}
Run Code Online (Sandbox Code Playgroud)
条件对于少数元素是正确的,然后对所有剩余的元素变为假.
不幸的是,这不起作用(即使我忽略性能)因为我elements
是一个无限的迭代器.
有没有办法在for-comprehension中使用"break",这样当某个条件成立时它会停止产生元素?否则,计算我的scala-idiomatic方法是e2
什么?
SolR DataImportHandler的配置文件包含针对数据库运行的SQL查询,如何将结果列映射到SolR文档字段,当然还包括连接到数据库所需的参数.
在我们的项目中,数据库连接参数(特别是数据库密码)从环境变为环境,这迫使我们为每个环境维护整个配置XML文件的略微不同的副本.
有没有办法将数据库连接参数(特别是密码)与SQL语句和声明分开配置,因此每个配置都保持一次且仅一次?
我对输入数据进行了一些验证,我真的更愿意在控制器代码中处理,因为:
verifying
表单定义中的函数混乱会降低代码内聚力.什么是一个干净的方式来生成一个新的,Form
就像刚刚绑定在success
分支中的附加(字段或一般)错误消息Form.fold
?
为了说明,我想要像Form.withError
我在这里调用的(不存在的)方法:
val form= myForm.bindFromRequest
form.fold(
errors => BadRequest(view(errors))
{
case(data, button) =>
button match {
case Some("save") =>
val r= costlyFunction(data)
if (r.isOk) {
doSomethingWith(r)
Ok(...)
}
else {
val f= form.withError("my custom error")
BadRequest(view(f))
}
case ...
}
}
Run Code Online (Sandbox Code Playgroud)