如何在 swift 中使用泛型定义类型别名
How to define a type alias with generic in swift
我正在研究 swift 中的谓词转换函数:
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<T> = X->Bool
其中 X
在泛型中,这样我的代码就可以被重写,例如像
:
func PTRANS<X,Y> (f:X->Y)->PRED<Y>->PRED<X>{
return {q in (f ∘ q) }
}
我试过了:
typealias PRED = <T>(T->Bool)
但我收到以下错误消息:
Only syntactic type can be generic
尝试:typealias PRED<T> = (T->Bool)
似乎在语法上不正确导致:
expected = in typealiase declaration
我如何为 T
上的谓词声明一个类似于 Array<T>
的 typealias
:
typealias PRED<T> = T->Bool
?
有什么想法吗?
至少目前,typealias
不支持通用类型别名,例如 C++ using
关键字。
但是您可以通过以下方式进行。
struct Pred<A> {
typealias t = A -> Bool
}
let gt2: Pred<Int>.t = { n in n > 2 }
我正在研究 swift 中的谓词转换函数:
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<T> = X->Bool
其中 X
在泛型中,这样我的代码就可以被重写,例如像
:
func PTRANS<X,Y> (f:X->Y)->PRED<Y>->PRED<X>{
return {q in (f ∘ q) }
}
我试过了:
typealias PRED = <T>(T->Bool)
但我收到以下错误消息:
Only syntactic type can be generic
尝试:typealias PRED<T> = (T->Bool)
似乎在语法上不正确导致:
expected = in typealiase declaration
我如何为 T
上的谓词声明一个类似于 Array<T>
的 typealias
:
typealias PRED<T> = T->Bool
?
有什么想法吗?
至少目前,typealias
不支持通用类型别名,例如 C++ using
关键字。
但是您可以通过以下方式进行。
struct Pred<A> {
typealias t = A -> Bool
}
let gt2: Pred<Int>.t = { n in n > 2 }