【发布时间】:2012-09-02 07:56:21
【问题描述】:
我了解零参数方法和无参数方法之间的区别,但我真正不了解的是使无参数方法成为必要的语言设计选择。
我能想到的缺点:
- 令人困惑。每隔一两周,这里或 Scala 邮件列表上就会有关于它的问题。
- 这很复杂;我们还必须区分
() => X和=> X。 - 含糊不清:
x.toFoo(y)是指它所说的意思,还是x.toFoo.apply(y)? (答案:这取决于x的toFoo方法的重载和Foo的apply方法的重载,但如果发生冲突,您在尝试调用之前不会看到错误它。) - 它弄乱了操作符风格的方法调用语法:在链接方法时或在末尾避免分号干扰时,没有符号可用于代替参数。使用零参数方法,您可以使用空参数列表
()。
目前,您不能在一个类中同时定义这两者:您会收到一条错误消息,指出该方法已定义。他们也都转换为Function0。
为什么不直接将方法def foo 和def foo() 制作成完全相同的东西,并允许在有或没有括号的情况下调用它们?它的优点是什么?
【问题讨论】:
-
你甚至没有提到继承规则和与 vals 的交互。哦,名称参数缺乏对称性,这可能是一种可取之处(它们本身也转换为
Function0)。 -
您将两个完全不同的东西混为一谈:no-parens 与 empty-parens methods(如标题所示),以及
Function0与 thunk(如您的项目符号列表)建议)。 -
@0__ 问题完全不同。那个问我们什么时候应该使用其中一个。这个人问为什么需要两者都有(可能 - 我要问的)一个可行的替代方案,使它们完全相同。我很确定它不支持命名约定,这无论如何都是没有意义的,因为空括号方法可以在有或没有括号的情况下调用(也可以在有或没有它们的情况下定义)。
-
@LuigiPlinge - 好的,它们可能不一样(但相关)。因此,我试图添加一个答案。
标签: scala