Java';通过Scala宏的高效命令循环?

Java';通过Scala宏的高效命令循环?,scala,macros,metaprogramming,scala-macros,Scala,Macros,Metaprogramming,Scala Macros,Scala宏将类型良好的术语作为参数,而不是任意的AST,因此不太可能对它们进行某些操作,特别是引入新的绑定形式 假设我想要一个新的Scala命令for循环,该循环可以分解为尾部递归或while循环。例如,这: for_imp (i <- 1 to 10) { /* work */ } 在Scala中实现Java的高效命令式for循环的自然方法是什么?请查看的cfor,它几乎完全符合您所描述的内容。您可能还对该项目感兴趣:。它尝试执行您所描述的操作-使用macroSee优化理解 {

Scala宏将类型良好的术语作为参数,而不是任意的AST,因此不太可能对它们进行某些操作,特别是引入新的绑定形式

假设我想要一个新的Scala命令for循环,该循环可以分解为尾部递归或while循环。例如,这:

for_imp (i <- 1 to 10) {
  /* work */
}

在Scala中实现Java的高效命令式
for
循环的自然方法是什么?

请查看的
cfor
,它几乎完全符合您所描述的内容。您可能还对该项目感兴趣:。它尝试执行您所描述的操作-使用macroSee优化理解
{
   var i = 1
   while (i <= 10) {
     /* work */;
     i += 1
   }
}
@tailrec def loop(i: Int): Unit =
   if (i <= 10) {
      /* work */;
      loop(i + 1)
   }
loop(1)
for_opt(e: expr[Unit]): expr[Unit] =
  e match {
    case /* for loop */ => /* transform */
    case e => e
  }