go - Go2 从一种类型映射到另一种类型
问题描述
在Go 泛型提案的这个示例中,该Mapable
类型只有一个类型参数。
如何修改示例以允许从一种类型映射到另一种类型?
例如,如何重写 Map 方法以允许从int
to映射float64
?我尝试将表达式[Y any]
放在声明中的不同位置 for Map
,但没有一个通过语法检查器。
解决方案
我在这里看到的棘手的事情是,当您执行映射操作时,您期望结果也将是Mapable
. 因此,如果您将 type 数组映射到 typeT
数组K
,您必须选择结果可映射到什么。回T
? 还是只对自己?还是第三类?(在这种情况下,您必须再添加一个类型参数)。
首先,Mapable
struct 必须接受两个类型参数——输入数组的类型和结果数组的类型。所以它应该看起来像这样:
type Mapable[T, K any] struct {
Arr []T
}
现在Map
函数不接受函数T -> T
,但是T -> K
:
func (m Mapable[T, K]) Map(fn func(T) K) Mapable[K, K] {
var newCol []K
for _, item := range m.Arr {
newCol = append(newCol, fn(item))
}
return NewMapable[K, K](newCol)
}
现在,为了简单起见,我选择返回类型为Mapable[K, K]
,即。结果Mapable
只能映射到相同的类型,但您可以选择返回Mapable[K, T]
以便Mapable
可以“映射回”到第一种类型。
无论如何,这是带有新代码的游乐场:https ://go2goplay.golang.org/p/OxOwaaL16AX
这是我旁边的代码,以便更好地了解更改的内容:https ://www.textcompare.org/index.html?id=5f6df344fa7b900017d8d157
推荐阅读
- flutter - 为 Flutter 自定义初始项目模板
- javascript - 如何在 csp 中允许 https://*?
- jenkins - 詹金斯:将凭证变量绑定到groovy中的秘密文件
- docker - Kafka,从 docker 容器运行时融合云身份验证错误。SASL 身份验证错误:身份验证失败
- python - 如果另一列中所有唯一值的行值相等,则布尔索引 - 熊猫
- android - 访问 PreferenceFragment 后所有图像变为白色
- python - 如何忽略熊猫数据框中的值而不是删除它
- flutter - 如何动态更改 TextFormField 初始值?
- amazon-cognito - 每当更改用户属性时,是否会触发任何类型的 Cognito 回调?
- javascript - 无法在 foreach 循环中对集合中的值求和