Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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 创建调用无参数构造函数的函数时()vs Unit的用法_Scala - Fatal编程技术网

Scala 创建调用无参数构造函数的函数时()vs Unit的用法

Scala 创建调用无参数构造函数的函数时()vs Unit的用法,scala,Scala,我最近遇到了一种情况,我需要创建一个函数来调用无参数构造函数。下面的代码演示 class NoNumber() {} val create : Unit => NoNumber = Unit => new NoNumber() val nn = create() 这段代码编译并创建一个新的NoNumber实例,并按预期将其分配给nn。然而,有几件事我没有预料到 我的第一次尝试(没有编译)如下 val create : Unit => NoNumber = () => n

我最近遇到了一种情况,我需要创建一个函数来调用无参数构造函数。下面的代码演示

class NoNumber() {}
val create : Unit => NoNumber = Unit => new NoNumber()
val nn = create()
这段代码编译并创建一个新的NoNumber实例,并按预期将其分配给nn。然而,有几件事我没有预料到

我的第一次尝试(没有编译)如下

val create : Unit => NoNumber = () => new NoNumber()
为什么在上面的例子中,单元工作而()不工作?我的印象是()是Unit的唯一实例,因此()似乎最有意义

其次,我在编译代码时看到以下警告

警告:(3,22)已通过插入()修改参数列表 不推荐:这不太可能是您想要的。签名: 函数1.apply(v1:T1):R给定参数:after 自适应:Function1(():Unit)lazy val nn=create()

这意味着什么?应如何更改代码以删除警告


谢谢

Unit=>A
()=>A
不是一回事

Unit=>A
Function1[Unit,A]
的语法糖,该函数的单个参数为
Unit
,返回
A
。您将类型
Unit
与具有类型
Unit
的值
()
混淆。i、 例如,你不能说:

scala> val a: () = ()
<console>:1: error: '=>' expected but '=' found.
       val a: () = ()
             ^
如果要使用
val nn=create
,那么
nn
实际上就是一个函数,
Unit=>nonnumber
。如果您有:

val nn = create()
你实际上正在做:

val nn = create.apply(())
令人困惑,是吗?因此,弃用警告。前者只是将
()
传递给
函数1[单元,非编号]
,但它看起来非常像
函数0
。您可能想要的是:

val create : () => NoNumber = () => new NoNumber()

Unit=>A
()=>A
不是一回事

Unit=>A
Function1[Unit,A]
的语法糖,该函数的单个参数为
Unit
,返回
A
。您将类型
Unit
与具有类型
Unit
的值
()
混淆。i、 例如,你不能说:

scala> val a: () = ()
<console>:1: error: '=>' expected but '=' found.
       val a: () = ()
             ^
如果要使用
val nn=create
,那么
nn
实际上就是一个函数,
Unit=>nonnumber
。如果您有:

val nn = create()
你实际上正在做:

val nn = create.apply(())
令人困惑,是吗?因此,弃用警告。前者只是将
()
传递给
函数1[单元,非编号]
,但它看起来非常像
函数0
。您可能想要的是:

val create : () => NoNumber = () => new NoNumber()

我可以说
Function1[Unit,A]
Function0[A]
几乎是同构的,但是@TravisBrown或@som snytt会告诉我为什么不清楚。这只是一个技术性的问题,你可以有一个参数为
Unit
的函数。它可能并不比一个无参数的函数更有用,但它们是如此的不同。唯一有点奇怪的是:“Unit=>A是Function1[Unit,A]的语法糖,一个单参数为Unit的函数返回一个”方括号中的参数是类型,因此该函数是一个将Unit-ie()-类型映射到A-ie-new-A类型的函数,所以()=>新的A。我还不知道我的想法在哪里是不正确的,但是我确实看到了Function1和Function0的区别,我想要的是Function0。谢谢。好的,在这种情况下,我想应该避免使用Function1[Unit,…],因为它没有什么意义。我想在
Unit=>new NoNumber()中添加
Unit
实际上是变量的名称,而不是类型。我可以说
Function1[Unit,a]
Function0[a]
几乎是同构的,但@TravisBrown或@som snytt会告诉我为什么不清楚。这只是一个技术性的问题,你可以有一个参数为
Unit
的函数。它可能并不比一个无参数的函数更有用,但它们是如此的不同。唯一有点奇怪的是:“Unit=>A是Function1[Unit,A]的语法糖,一个单参数为Unit的函数返回一个”方括号中的参数是类型,因此该函数是一个将Unit-ie()-类型映射到A-ie-new-A类型的函数,所以()=>新的A。我还不知道我的想法在哪里是不正确的,但是我确实看到了Function1和Function0的区别,我想要的是Function0。谢谢。在这种情况下,我想应该避免使用Function1[Unit,…],因为它没有什么意义。我想在
Unit=>new NoNumber()中添加
Unit
,它实际上是变量的名称,而不是类型。