小编Rou*_*ari的帖子

为什么我不能链接几个Scala中缀方法调用

我正在研究DSL,我遇到了使用方法作为链中的中缀运算符的问题.我将尝试用一些代码来解释它.我有一个特质Term和案例类LiteralVariable扩展它.我想使用一些运算符构造一个术语实例列表.

case class Expr(val terms: List[Term]) {
 def +(v: String) = Expr(Literal(v) :: terms)
 def -->(func: List[String] => List[String]) = terms match {
  case Literal(v) :: ts => Expr(Variable(v, func) :: ts)
  case _ => throw new Exception("Can only apply function on literal")
 }
}

object foo {
 def bar(name: String) = Expr(Literal(name) :: Nil)
}

// some functions
val one = ... 
val all = ...

// works
foo bar "x"        
// res1: …
Run Code Online (Sandbox Code Playgroud)

scala infix-operator

8
推荐指数
1
解决办法
1629
查看次数

使用Jade/Express.js渲染表,每行有多个元素

我正在尝试使用简单的对象数组中的jade渲染表.但是,我不想简单地为每个对象渲染一行,而是想在每一行上渲染三个对象.

<table>
  <thead>...</thead>
  <tbody>
    <tr>
      <td>obj0</td>
      <td>obj1</td>
      <td>obj2</td>
    </tr>
    <tr>
      <td>obj3</td>
      <td>obj4</td>
      <td>obj5</td>
    </tr>
    ...
  </tbody>
</table
Run Code Online (Sandbox Code Playgroud)

html html-table node.js express pug

3
推荐指数
2
解决办法
1万
查看次数

我该如何注释这个尾递归Scala函数

我有一个函数,我知道是尾递归.但是由于我定义它的方式,编译器抱怨函数在非尾部位置具有递归调用.这是功能.

@tailrec
def travel: (Int, List[Char]) => Int = {
    case (n,        Nil) => n
    case (n, '~' :: sls) => travel(0, sls)
    case (n, '^' :: sls) => travel(max(n-1,0), sls)
    case (n, '>' :: sls) => travel(n+1, sls)
    case (_,  s  :: sls) => throw new IllegalArgumentException("Illegal selector '" + s + "'")
}
Run Code Online (Sandbox Code Playgroud)

我明白了

error: could not optimize @tailrec annotated method travel: it contains a recursive call not in tail position
def travel: (Int, List[Char]) => Int = …
Run Code Online (Sandbox Code Playgroud)

scala tail-recursion tail-call-optimization

2
推荐指数
1
解决办法
489
查看次数