加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在scala中使用函数类型定义有意义的类型?

发布时间:2020-12-16 19:01:30 所属栏目:安全 来源:网络整理
导读:我是新的,天真的 scala.只需要知道如何定义一个函数类型,如Set here(仅作为示例). type Set = Int = Boolean def set(i: Int): Set = n = n == i def contains(s: Set,i: Int) = s(i) 我也阅读了语言无关功能类型的维基.似乎C#,C,Haskel也有类似的语法. http
我是新的,天真的 scala.只需要知道如何定义一个函数类型,如Set here(仅作为示例).

type Set = Int => Boolean 

def set(i: Int): Set = n => n == i 
def contains(s: Set,i: Int) = s(i)

我也阅读了语言无关功能类型的维基.似乎C#,C,Haskel也有类似的语法.
http://en.wikipedia.org/wiki/Function_type.

我的问题是,在这种情况下,您更喜欢定义这种抽象类型函数之一并使用它,
没有别的选择达到同一个目标?比较直接用def定义一个具体的方法

或者我可以放弃要求,说使用这个函数类型,我可以使代码看起来好多了.
所以我可以更多地了解函数类型.

这里我主要感兴趣的部分是Set = Int =>布尔值,当你想抽象出来的时候?我正在寻找现实生活中的用例,以及如何在具体的方法中实现它.
例如,这个有点复杂.

type Set2 = (Int,Int,String) => (Boolean  => Int) => (Boolean  => Int).

我知道这被称为更高级的类型.语法本身确实有意义.
但是我只需要比较简单的现实生活例子给scala初学者.

我发现这个答案为它描述.
What is a higher kinded type in Scala?

但是,对我看来还是有点模糊.我喜欢初学者简单的答案.
似乎函数本身不需要任何除了实现mentod的参数和结果类型之外的任何东西.
例如,如果结果(Boolean)不是来自参数(Int),它仍然编译.

def set(i: Int): Set1 = aa => new Date().getDate() == i

我是对的吗

让我知道为什么这个问题不清楚或不好,所以我可以改进,先生!

解决方法

Scala中的关键字类型为给定类型创建一个别名.例如:

scala> type Str = String
defined type alias Str

scala> val greeting: Str = "Hello World!"
greeting: Str = Hello World!

这与你做的非常相似:

scala> type Set = Int => Boolean
defined type alias Set

scala> val isEven: Set = _ % 2 == 0
isEven: Int => Boolean = <function1>

scala> println(isEven(4))
true

scala> println(isEven(5))
false

虽然类型别名有时可用于澄清目的,文档不是其主要用例. Scala的系统非常复杂.例如,有一种替代泛型,即抽象类型.考虑这个:

// Generics
abstract class GenericAbstraction[TypeArgument]
class GenericConcrete extends GenericAbstraction[String]

// Abstract types
abstract class TypeAbstraction {
   type TypeArgument
}
class TypeConcrete extends TypeAbstraction {
   type TypeArgument = String
}

这些代码示例基本上完成了同样的事情,但是有些情况下需要抽象类型,但不能(或不应该)使用泛型.您可以找到更多信息here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读