我开始使用scala,并尝试应用功能方式,但我出来了一堆嵌套if\else结构很难读,我想知道有更好的方法来编程这样的东西?例如,我写了脚本,执行括号平衡
def balance(chars: List[Char]): Boolean = {
def checkParentesys(chars: List[Char], parentesis: List[Char]): Boolean =
if (chars.isEmpty && parentesis.isEmpty)
true
else
if (chars.head == '(')
checkParentesys(chars.tail, '(' :: parentesis)
else
if (parentesis.isEmpty)
false
else
checkParentesys(chars.tail, parentesis.tail)
checkParentesys(chars.filter(s => s == '(' || s == ')'), List())
}
Run Code Online (Sandbox Code Playgroud)
你能建议,我怎样才能把它写得更实用,更像scala?
我需要从表中检索单行,我感兴趣的是哪种方法更好.一方面getSingleResult是为了检索单个结果而设计的,但它会引发异常.请问这种方法在性能与效益getResultList同
query.setFirstResult(0);
query.setMaxResults(1);
Run Code Online (Sandbox Code Playgroud) 我想在字段(本例中是字符串)上放置一组标准约束(如非空字母数字字符串,长度为3到240个字符),并且想要知道是否有一种方法可以覆盖模型代码中的某些约束.这也将是一个重写,或者只是对覆盖注释进行两次验证?
它应该是这样的
@AlphanumericString
@Size(min=100, max=150) //override standart values from AlphanumericString annotation
Run Code Online (Sandbox Code Playgroud)
谢谢你的回答
好的,回答我自己.@OverridesParameter有助于重新分配嵌套的注释参数
@Numerical
@Size //arbitrary parameter values
@ConstraintValidator(FrenchZipcodeValidator.class)
@Documented
@Target({ANNOTATION_TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface FrenchZipCode {
String message() default "Wrong zipcode";
String[] groups() default {};
@OverridesParameters( {
@OverridesParameter(constraint=Size.class, parameter="min")
@OverridesParameter(constraint=Size.class, parameter="max") } )
int size() default 5;
@OverridesParameter(constraint=Size.class, parameter="message")
String sizeMessage() default "{error.zipcode.size}";
@OverridesParameter(constraint=Numerical.class, parameter="message")
String numericalMessage() default "{error.zipcode.numerical}";
}
Run Code Online (Sandbox Code Playgroud)