declare variable in custom control structure in scala
我想知道是否有办法在自定义控制结构的参数列表中创建临时变量。
基本上,我想创建一个类似于
for 循环,我可以在其中创建一个变量 i,并且只能在循环体中访问 i:
1 2 3 4 |
我想在我的代码中做类似的事情。例如,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | customControl ( myVar <-"Task1") { computation(myVar) } customControl ( myVar <-"Task2") { computation(myVar) } def customControl (taskId:String) ( body: => Any) = { Futures.future { val result = body result match { case Some(x) => logger.info("Executed successfully") x case _ => logger.error(taskId +" failed") None } } } |
现在,我通过在自定义控制结构之外声明一个变量来解决这个问题,这看起来不太优雅。
1 2 3 4 5 6 7 8 9 |
你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
然后你可以得到这样的语法,这不完全是你所要求的,但是你不用在单独的行上声明变量:
1 2 3 4 5 6 7 8 9 10 11 | scala> custom("ss") { myvar => println("in custom" + myvar); myvar +"x" } res7: scala.actors.Future[Any] = <function0> in custom ss ss failed scala> custom("ss") { myvar => println("in custom" + myvar); Some(myvar +"x") } in custom ss Executed successfully res8: scala.actors.Future[Any] = <function0> scala> |
注意,内置的
的语法糖
1 | expr foreach (x => body) |
因此,可以通过定义自定义
还请注意,已经有一个适用于字符串的
注意:您也可以将上面
这会让你做类似
的事情
1 2 |
这只是一个微不足道的(和无用的)示例,因为现在