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> 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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。