我想在Parity Substrate自定义运行时中使用Struct
创建数据类型。数据类型是通用的,因此我可以在不同的类型上使用它。
我正在尝试以下操作,但尚未编译。编译器抱怨找不到T
的子类型。
pub struct CustomDataType<T> {
data: Vec<u8>,
balance: T::Balance,
owner: T::AccountId,
}
我应该能够编译通用结构。
答案 0 :(得分:5)
不幸的是,the answer that Sven Marnach gives在奇偶校验衬底的环境中不起作用。在结构顶部使用了其他派生宏,这些宏在沿“直观”路径运行时会引起问题。
在这种情况下,您应该将所需的特征直接传递到自定义类型中,并为该结构的上下文创建新的泛型。
类似这样的东西:
q = {
"query": {
"match_all": {}
}
},
"script": {
"lang" : "painless",
"inline" : {if (ctx._source.dataId == item.dataId && ctx._source.versionId == item.versionId && ctx._source.items.obj1 == item.obj1) {ctx._source.items.remove()}}",
"params" : {
'dataFrame': [{
"dataId" : 'myDataIdList',
"versionId" : 'myVersionId',
"obj1" : 'myValue'
} ]
}
}
}
es.update_by_query(index=myindex, body=q)
我们刚刚创建了a doc for this exact scenario,希望对您有所帮助。
答案 1 :(得分:3)
看起来T::Balance
和T::AcountId
是某些特征的关联类型,因此只有在为MyTrait
实现了该特征(例如T
)时才能使用它们。您可以通过添加特征绑定来告诉编译器T
实现了MyTrait
:
pub struct CustomDataType<T: MyTrait> {
data: Vec<u8>,
balance: T::Balance,
owner: T::AccountId,
}
通常,如果类型受适当的类型界限限制,则只能假定通用类型的属性,方法和关联类型。 (唯一的例外是默认假定类型参数的大小为 ,因此您可以进行此假设而没有明确的限制。)