如何为无参数函数定义 scala 类型?

发布于 2024-12-02 04:17:16 字数 303 浏览 0 评论 0原文

这行得通,

def func(f: => Int) = f

这不行(例如在类内部)

type EmptyFunct = => Int

 type EmptyFunct = (=> Int)

Scala 版本 2.9 有两个问题:

  1. 为什么语法糖在第二种情况下不起作用?
  2. 如何在没有语法糖的情况下定义这个函数?

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:

  1. Why dosn't syntax sugar work in second case?
  2. How to define this function without syntax sugar?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

又爬满兰若 2024-12-09 04:17:16

=> Int 并不完全是一个没有参数的函数,它是一个按名称传递约定调用的 Int 参数。 (当然,这是相当好的一点,因为它是通过传递一个不带参数的函数来实现的)。

不带参数的函数写成() =>;整数。您可以执行 type EmptyFunct = () =>;整数。

它不是一个类型。在 func 内部,f 将被键入为 Int。 () 类型的参数 =>内特不会。

def func(f: => Int) = f *2

func(:=>Int) Int

但是

def func(f: () => Int) : Int = f*2

错误:值 * 不是 () 的成员 =>整数

=> 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 do type EmptyFunct = () => Int.

It is not a type. Inside func, f will be typed as an Int. An argument of type () => Int will not.

def func(f: => Int) = f *2

func (: => Int) Int

But

def func(f: () => Int) : Int = f*2

error: value * is not a member of () => Int

家住魔仙堡 2024-12-09 04:17:16

您应该使用 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.

合久必婚 2024-12-09 04:17:16

我认为返回 int 且不带参数调用的方法没有多大意义。它要么返回一个常量,以便您可以使用该常量,要么它会使用 var?

那么让我们使用 var:

var k = 10 
val fi = List (() => k * 2, () => k - 2)
val n = fi(0)
n.apply 
k = 11
n.apply

结果是 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:

var k = 10 
val fi = List (() => k * 2, () => k - 2)
val n = fi(0)
n.apply 
k = 11
n.apply

result is 20, then 22.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文