gpt4 book ai didi

scala - 我们是否可以为值文字定义类型别名?

转载 作者:行者123 更新时间:2023-12-05 08:46:17 25 4
gpt4 key购买 nike

类型别名通常可以这样使用:

type Point = (Double, Double)

但我正在玩 scala repl,你也可以这样做:

类型二 = 2

使用这个别名你可以定义函数:

scala> def three(x: Two) = x + 1
def three(x: Two): Int

scala> three(1)
-- Error:
1 |three(1)
| ^
| Found: (1 : Int)
| Required: Two

scala> three(2)
val res0: Int = 3

如您所见,Two 确实代表了 2 的单例类型。它似乎只适用于值文字,而不适用于变量:

scala> val x = 2
val x: Int = 2

scala> type Two = x
-- Error:
1 |type Two = x
| ^
| Not found: type x

它似乎也适用于某些函数值,但不适用于其他函数值:

scala> type AlwaysThree = () => 3
// defined alias type AlwaysThree = () => 3

scala> type AlwaysThree = () => 2 + 1
-- Error:
1 |type AlwaysThree = () => 2 + 1
| ^
| Not found: type +

我想知道为什么 scala 允许这样做。这个小东西在这里有什么原因吗?

最佳答案

为了完成@Silvio 的回答,这些类型的一个很好的用例是联合类型,用于定义方法可以返回或接受的一组非常精确的值。

例如:

type LastDay = 28 | 29 | 30 | 31

def getLastDayOfMonth(month: String): LastDay = ???

或者:

type Role = "Driver" | "Passenger"

def getInTheCar(role: Role) = ???

关于scala - 我们是否可以为值文字定义类型别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69967905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com