Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala:关键字的别名?_Scala - Fatal编程技术网

scala:关键字的别名?

scala:关键字的别名?,scala,Scala,有没有办法为scala关键字创建别名?特别是,我有一些涉及“val”的样板语法,为了便于阅读,我希望能够键入一些“@@”,并将其翻译为val 编辑: 在某些情况下,可以很方便地替换“lazy val”,而不仅仅是“val”。用例与充当python装饰器的函数有关。看起来是这样的: lazy val function = Decorate(function_ _) def function_(x: Int, ...) = { ... } @ function = Decorate(functio

有没有办法为scala关键字创建别名?特别是,我有一些涉及“val”的样板语法,为了便于阅读,我希望能够键入一些“@@”,并将其翻译为val

编辑:

在某些情况下,可以很方便地替换“lazy val”,而不仅仅是“val”。用例与充当python装饰器的函数有关。看起来是这样的:

lazy val function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }
@ function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }
如果它看起来像这样会更好:

lazy val function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }
@ function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }
这样就不会在def上叠加val,因为两个名称非常相似。(函数名不是用来调用的,因此它是最干净的,可以使名称相似。)

不,没有

(请允许我发布)

不,没有


(请允许我发布)

哎哟!这不是特别惯用的Scala

首先,您将一个方法命名为“
function”\uuuquo;
”,它们不是一回事,一个方法只是某个类的一个成员,一个函数本身就是一个对象(尽管编译器可以通过类似于原语自动装箱的方式将一个方法“提升”到一个函数)

第二,什么是装饰?首字母大写表示它是一个单例,因此是一个对象,也是该表达式中唯一实际的“函数”


你能发布更多关于方法和装饰器实际工作的信息吗?这样我就可以给你一个更好的例子,告诉你如何在Scala中实现同样的功能!这不是特别惯用的Scala

首先,您将一个方法命名为“
function”\uuuquo;
”,它们不是一回事,一个方法只是某个类的一个成员,一个函数本身就是一个对象(尽管编译器可以通过类似于原语自动装箱的方式将一个方法“提升”到一个函数)

第二,什么是装饰?首字母大写表示它是一个单例,因此是一个对象,也是该表达式中唯一实际的“函数”


你能不能就方法和装饰器的实际功能发布更多的信息,以便我能给你一个更好的例子,说明如何在Scala中实现同样的功能?

我想可以编写一个Scala编译器插件来实现这一点。至少Eclipse插件实际上使用了原始的Scala编译器,因此它可能会与IDE配合得很好

其他:丹尼尔·C·索布拉尔是对的:不,没有


尽管如此,这听起来还是有点麻烦。

我想可以编写一个Scala编译器插件来实现这一点。至少Eclipse插件实际上使用了原始的Scala编译器,因此它可能会与IDE配合得很好

其他:丹尼尔·C·索布拉尔是对的:不,没有


尽管如此,这听起来还是有点麻烦。

如果
函数从来都不是直接调用的,为什么不编写呢

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, ...) => ... }
需要注意的是:简洁和简洁是两码事。在这里,就可读性而言,看起来您正试图以非常高的价格购买一些按键

更新:

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

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

如果
函数
从来都不是直接调用的,为什么不写呢

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, ...) => ... }
需要注意的是:简洁和简洁是两码事。在这里,就可读性而言,看起来您正试图以非常高的价格购买一些按键

更新:

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

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

了解用例的更多细节将非常有用。@@@只短一个字符,显然不容易阅读。“这听起来像是一个文本预处理器可以处理的东西,如果你真的需要它的话。”保罗同意了,并进行了编辑。谢谢相关问题:我在你的帖子中删掉了一个多余的
val
关键字。如果它是故意存在的,请注意,代码不会被编译。了解用例的更多细节将非常有用。@@@只短一个字符,显然不容易阅读。“这听起来像是一个文本预处理器可以处理的东西,如果你真的需要它的话。”保罗同意了,并进行了编辑。谢谢相关问题:我在你的帖子中删掉了一个多余的
val
关键字。如果是有意的,请注意代码不会编译。从海报的前一行问题猜测,
decoration
类似于
decoration
底部的
Memoize
对象,甚至
decoration
也不是真正的函数:它的
apply
方法具有类型参数和隐式参数。然而,我怀疑这个方法的名称对于发帖人的问题并不是很关键。它也可能是带有关联的
foo
函数的
foo
。@aaron-是的,尽管我觉得没有意识到这一区别,并且缺乏对函数的
compose
等方法的了解,再加上需要在方法名称后加上后缀
\uu
,以强制部分应用,这些都是OP问题的原因。从海报的前一行问题猜测,
decoration
类似于
decoration
底部的
Memoize
对象,它实际上不是一个函数:它的
apply
方法具有类型参数和隐式参数。不过,我怀疑