首页 文章

scala:关键字的别名?

提问于
浏览
1

有没有办法为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 回答

  • 0

    我想有人可以编写一个Scala编译器插件来实现这一目标 . 至少Eclipse插件实际上使用了原始的Scala编译器,所以 might 实际上与IDE很好地协同工作 .

    除此之外:Daniel C. Sobral是正确的:不,没有 .

    一点点收益听起来仍然很麻烦 .

  • 1

    不,没有 .

    (填充所以SO会让我发布)

  • 8

    哎哟!这不是特别惯用的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中实现相同的功能吗?

  • 0

    如果永远不打算直接调用 function_ ,为什么不写

    lazy val function = Decorate { (x: Int, ...) => ... }
    

    甚至

    /**
     * This version makes it more explicit that it's a function value.
     */
    lazy val function: (Int, ...) => ReturnType =
       Decorate { (x, ...) => ... }
    

    建议谨慎:简洁和简洁是两回事 . 在这里,看起来你试图在可读性方面以非常高的价格购买一些击键 .

    Update:

    如果你真的想为这种事情实现更简单的语法,你需要一个编译器插件 . 如果您建议使用基于注释的语法,这对Java / Scala开发人员来说可能非常直观:

    @decorate(Memoize)
    def slowFn(i: Int) = { ... }
    

相关问题