如何在scala中使用函数类型定义有意义的类型?
我是新的,天真的
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也有类似的语法. 我的问题是,在这种情况下,您更喜欢定义这种抽象类型函数之一并使用它, 或者我可以放弃要求,说使用这个函数类型,我可以使代码看起来好多了. 这里我主要感兴趣的部分是Set = Int =>布尔值,当你想抽象出来的时候?我正在寻找现实生活中的用例,以及如何在具体的方法中实现它. type Set2 = (Int,Int,String) => (Boolean => Int) => (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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |