Generic Functions
Inspect one language lane at a time so line-level text and code deltas stay readable.
Diff Lane
English
0 modified sections0 code block delta0 anchor delta
Diff Lane
中文
1 modified sections0 code block delta0 anchor delta
modified泛型成员函数textcode+1 line, -1 line
v1.0.5
Section Text
1
class、struct 与 enum 的成员函数可以是泛型的。例如:2
3
<!-- verify -->4
5
6
程序输出的结果为:7
8
9
在为类型使用 extend 声明进行扩展时,扩展中的函数也可以是泛型的,例如可以为 `Int64` 类型增加一个泛型成员函数:10
11
<!-- verify -->12
13
14
程序输出的结果将为:Code 1 · cangjie
1
class A {2
func foo<T>(a: T): Unit where T <: ToString {3
println("${a}")4
}5
}6
7
struct B {8
func bar<T>(a: T): Unit where T <: ToString {9
println("${a}")10
}11
}12
13
enum C {14
| X | Y15
16
func coo<T>(a: T): Unit where T <: ToString {17
println("${a}")18
}19
}20
21
main() {22
var a = A()23
var b = B()24
var c = C.X25
a.foo<Int64>(10)26
b.bar<String>("abc")27
c.coo<Bool>(false)28
}Code 2 · text
1
102
abc3
falseCode 3 · cangjie
1
extend Int64 {2
func printIntAndArg<T>(a: T) where T <: ToString {3
println(this)4
println("${a}")5
}6
}7
8
main() {9
var a: Int64 = 1210
a.printIntAndArg<String>("twelve")11
}Code 4 · text
1
122
twelvev1.1.0
Section Text
1
class、struct、enum 与 interface 的成员函数可以是泛型的。例如:2
3
<!-- verify -->4
5
6
程序输出的结果为:7
8
9
在为类型使用 extend 声明进行扩展时,扩展中的函数也可以是泛型的,例如可以为 `Int64` 类型增加一个泛型成员函数:10
11
<!-- verify -->12
13
14
程序输出的结果将为:Code 1 · cangjie
1
class A {2
func foo<T>(a: T): Unit where T <: ToString {3
println("${a}")4
}5
}6
7
struct B {8
func bar<T>(a: T): Unit where T <: ToString {9
println("${a}")10
}11
}12
13
enum C {14
| X | Y15
16
func coo<T>(a: T): Unit where T <: ToString {17
println("${a}")18
}19
}20
21
interface I {22
func doo<T>(a: T): Unit where T <: ToString23
}24
class D <: I {25
public func doo<T>(a: T): Unit where T <: ToString {26
println("${a}")27
}28
}29
abstract class E {30
public func eoo1<T>(a: T): Unit where T <: ToString31
public open func eoo2<T>(a: T): Unit where T <: ToString32
}33
class F <: E {34
public func eoo1<T>(a: T): Unit where T <: ToString {35
println("${a}")36
}37
public func eoo2<T>(a: T): Unit where T <: ToString {38
println("${a}")39
}40
}41
main() {42
var a = A()43
var b = B()44
var c = C.X45
var d = D()46
var f = F()47
a.foo<Int64>(10)48
b.bar<String>("abc")49
c.coo<Bool>(false)50
d.doo<String>("doo")51
f.eoo1<String>("eoo1")52
f.eoo2<String>("eoo2")53
return 054
}Code 2 · text
1
102
abc3
false4
doo5
eoo16
eoo2Code 3 · cangjie
1
extend Int64 {2
func printIntAndArg<T>(a: T) where T <: ToString {3
println(this)4
println("${a}")5
}6
}7
8
main() {9
var a: Int64 = 1210
a.printIntAndArg<String>("twelve")11
}Code 4 · text
1
122
twelve