如何为无参数函数定义 scala 类型?
这行得通,
def func(f: => Int) = f
这不行(例如在类内部)
type EmptyFunct = => Int
或
type EmptyFunct = (=> Int)
Scala 版本 2.9 有两个问题:
- 为什么语法糖在第二种情况下不起作用?
- 如何在没有语法糖的情况下定义这个函数?
This works
def func(f: => Int) = f
This dosn't (inside class for example)
type EmptyFunct = => Int
or
type EmptyFunct = (=> Int)
Scala version 2.9
Two questions:
- Why dosn't syntax sugar work in second case?
- How to define this function without syntax sugar?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
=> Int 并不完全是一个没有参数的函数,它是一个按名称传递约定调用的 Int 参数。 (当然,这是相当好的一点,因为它是通过传递一个不带参数的函数来实现的)。
不带参数的函数写成
() =>;整数。您可以执行
type EmptyFunct = () =>;整数。
它不是一个类型。在 func 内部,f 将被键入为 Int。 () 类型的参数 =>内特不会。
但是
=> Int is not exactly a function without parameter, it is an Int argument with call by name passing convention. (Of course, that is rather fine a point, as it is implemented by passing a function without parameter ).
The function without argument is written
() => Int
. You can dotype EmptyFunct = () => Int
.It is not a type. Inside func, f will be typed as an Int. An argument of type () => Int will not.
But
您应该使用
Function0
在第一种情况下,它不起作用,因为您声明了一个非参数函数,但因为您指示通过名称调用参数。
You should use
Function0
In the first case it does not work because you declare a non argument Function but because you indicates that the parameter is called by name.
我认为返回 int 且不带参数调用的方法没有多大意义。它要么返回一个常量,以便您可以使用该常量,要么它会使用 var?
那么让我们使用 var:
结果是 20,然后是 22。
I don't see much sense in a method, returning an int, invoked with no parameter. Either it returns a constant, so you could use the constant, or it would use a var?
So let's go with a var:
result is 20, then 22.