比如 A 类和 B 类都有一个 Call 的 method,返回类型是它自身,并且内部逻辑几乎一样,有什么办法节省代码吗
type A struct{}
func (a A)Call() A {
...
return A{}
}
type B struct{}
func (b B)Call() B {
...
return B{}
}
我目前看到的唯一办法是像 refect.rtype 那样进行 unsafe point 的类型强转,但不知道这样会不会有 gc 问题
1
xwhxbg 2018-03-05 11:03:49 +08:00
```
func (a *A) Call() A{ return a } ``` 就行了,你这样 return 的每次都是个新的结构体,我猜测你想实现的是类似 js 可以 return this |
2
bigpigeon OP @xwhxbg 你理解错了,我是像把 A 的 call 和 B 的 call 中的相同部分不用写 2 份,目前好像没有办法,reflect.rtype 好像也不行
|
3
xwhxbg 2018-03-05 11:17:01 +08:00
哦,你是想实现 mixin 吧,就是有一部分代码逻辑是可以服用的,可以考虑 decorator,或者 type interface,比如在重复的代码里 A,B 都要有 bcd 方法,就写个 interface 包含 bcd 方法,然后 A,B 实现 interface
|
4
hjc4869 2018-03-05 11:24:29 +08:00 via iPhone
要是有的话还要泛型干啥🤣
|
5
bigpigeon OP @xwhxbg 还是不行,因为 A,B 的 bcd 返回自身对象,而有些 method 是 A 有 B 没有,interface 化就必须让 B 对这些 method 做空实现
|
6
xwhxbg 2018-03-05 11:31:19 +08:00
emmmm,那样确实会反而更多代码了,哈哈,看来只能重复写了
|