【问题标题】:How to define a type alias with generic in swift [duplicate]如何在swift中使用泛型定义类型别名[重复]
【发布时间】:2015-04-07 00:54:37
【问题描述】:

我正在快速研究谓词转换器函数:

infix operator ⋀ {}
infix operator ∨ {}
prefix operator ¬ {}
infix operator ⟹ {}


func ⋀ <T>(A : T->Bool , B: T->Bool)->T->Bool{
    return { x in A(x) && B(x)}
}

func ∨ <T>(A : T->Bool , B: T->Bool)->T->Bool{
    return { x in A(x) || B(x)}
}

prefix func ¬ <T>(A : T->Bool)->T->Bool{
    return { x in !A(x)}
}


func ⟹ <T>(A : T->Bool , B: T->Bool)->T->Bool{
    return { x in (¬A ∨ B)(x)}
}

func TRUE<T>()->T->Bool{
    return{x in true}
}

func FALSE<T>()->T->Bool{
    return{x in false}
}

infix operator ∘ {}
func ∘ <X,Y,Z>(f:X->Y, g:Y->Z)->X->Z{
    return{ x in g(f(x))}
}

func PTRANS<X,Y> (f:X->Y)->(Y->Bool)->(X->Bool){
    return {q in (f ∘ q) }
}

我尝试为谓词类型定义一个类型别名:PRED&lt;T&gt; = X-&gt;Bool 其中X 是泛型类型,以便我的代码可以重写,例如喜欢 :

func PTRANS<X,Y> (f:X->Y)->PRED<Y>->PRED<X>{
    return {q in (f ∘ q) }
}

我试过了:

typealias PRED = <T>(T->Bool)

但我收到以下错误消息:

只有句法类型可以是泛型的

尝试:typealias PRED&lt;T&gt; = (T-&gt;Bool) 似乎在语法上不正确,导致:

类型别名声明中的预期 =

我如何为 T 上的谓词声明类似于 Array&lt;T&gt;typealiastypealias PRED&lt;T&gt; = T-&gt;Bool ?

有什么想法吗?

【问题讨论】:

  • 你不能这样做。这也可能是重复的。我觉得以前有人问过这个问题。
  • @Claude Nice Sugar。 github上有这些吗?

标签: swift generics type-alias


【解决方案1】:

至少目前,typealias 不支持泛型类型别名,例如 C++ 中的 using 关键字。

但你可以通过以下方式做到这一点。

struct Pred<A> {
    typealias t = A -> Bool
}
let gt2: Pred<Int>.t = { n in n > 2 }

【讨论】:

  • 感谢@findall 的帮助。会试试这个
猜你喜欢
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多