有没有办法为scala关键字创建别名?特别是我有一些涉及“val”的样板语法,为了使它更容易阅读,我希望能够键入“@@”并将其转换为val .
编辑:
在某些情况下,能够替换“lazy val”而不仅仅是“val”可能非常方便 . 用例与充当python装饰器的函数有关 . 它看起来像这样:
lazy val function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }
如果它看起来像这样会好很多:
@ function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }
只是为了在def的顶部没有堆叠的val,两个名字都非常相似 . (函数名称并不意味着被调用,所以它是最干净的,使名称相似 . )
4 回答
我想有人可以编写一个Scala编译器插件来实现这一目标 . 至少Eclipse插件实际上使用了原始的Scala编译器,所以 might 实际上与IDE很好地协同工作 .
除此之外:Daniel C. Sobral是正确的:不,没有 .
一点点收益听起来仍然很麻烦 .
不,没有 .
(填充所以SO会让我发布)
哎哟!这不是特别惯用的Scala .
首先,您将通过编译器将方法“
function_
", they're not the same thing, a method is simply a member of some class, a Function is an object in its own right (although a method can be "提升”命名为函数,其方式与原语的自动装箱类似 .二,什么是
Decorate
?最初的大写字母表明它是一个单例,因此是一个对象,也是该表达式中唯一的实际"Function"!你可以发一些关于方法和装饰器实际做了什么的信息,这样我可以给你一个更好的例子来说明你如何在Scala中实现相同的功能吗?
如果永远不打算直接调用
function_
,为什么不写甚至
建议谨慎:简洁和简洁是两回事 . 在这里,看起来你试图在可读性方面以非常高的价格购买一些击键 .
Update:
如果你真的想为这种事情实现更简单的语法,你需要一个编译器插件 . 如果您建议使用基于注释的语法,这对Java / Scala开发人员来说可能非常直观: