我是新的,天真的scala。只知道如何定义一个函数类型,如Set(仅作为示例)。如何在scala中定义类型的函数类型有意义?
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
或者我可以放宽要求,说使用这个函数类型,我可以使代码看起来好多了。 这样我可以更多地了解功能类型。
在这里我主要感兴趣的部分是type Set = Int => Boolean
,当你想抽象出来吗?我正在寻找现实生活中的用例,以及如何在scala语法中以具体的方法来实现它。例如,这个有点复杂。
type Set2 = (Int,Int,String) => (Boolean => Int) => (Boolean => Int).
我知道它被称为高级类型。语法本身确实是有意义的。 但我只是需要更平实的现实生活中的例子,以斯卡拉初学者。
我找到了这个答案来描述它。 What is a higher kinded type in Scala?
但它对我来说仍然有点模糊。初学者我更喜欢简单的答案。 看起来函数本身并不需要任何东西,除了实现代码的参数和结果类型外。 例如,如果结果(布尔值)不是来自参数(Int),它仍然编译。
def set(i: Int): Set1 = aa => new Date().getDate() == i
我是不是很擅长?
让我知道为什么这个问题不清楚或不好,所以我可以改进它,先生!
你的语法错综复杂,单词的选择很奇怪或明显错误。例如,“你是否有特别需要定义”没有多大意义,“需要”可能应该是“需求”。其他的例子是顶部的'天真'和你所做的唯一问题'目标'(目标)。这是另一个问题:一个问题应该是一个问题。它以'?'结尾,这是一个问题。在这里,问题在文本的中间,甚至在一个段落的中间。我并没有让你失望,但你并不清楚。 –
@丹尼尔,我已经更新了这个问题。你可以自由修复错误的语法和单词以及任何你想纠正的问题。 –
@丹尼尔,其实我只是不清楚如何在正确的情况下使用这些类型的函数类型。如类型Set2 =(Int,Int,String)=>(Boolean => Int)。它可能会更复杂。 –