我有一个来自wasm-bindgen crate的例子:text 有来自许多Deref实现的方法.尽管我认为具有关联类型的特征可以实现一次
我不知道它是如何实施的 例如,我不知道什么可以用作衍生品;Target=?
我有一个来自wasm-bindgen crate的例子:text 有来自许多Deref实现的方法.尽管我认为具有关联类型的特征可以实现一次
我不知道它是如何实施的 例如,我不知道什么可以用作衍生品;Target=?
如果您一直向下滚动到特征实现,您会发现只有one implementation of Deref
个.然后您可以通过点击查看目标还实现了deref.这种情况还在继续.
HtmlCanvasElement
个工具Deref<Target = HtmlElement>
个HtmlElement
实现Deref<Target = Element>
Element
实现Deref<Target = Node>
Node
实现Deref<Target = EventTarget>
EventTarget
实现Deref<Target = Object>
Object
实现Deref<Target = JsValue>
Rustdoc列出了来自可传递deref的方法,因为它们都是可在类型上调用的.
Web-sys之所以做到这一点,是因为它最接近于模仿JavaScript继承,您可以看到here:
从其父级HTMLElement继承属性.
您可以用相同的方式遍历它们,只是省略了Object
,因为所有内容都继承自Object
.
如果您正在编写本机Rust代码,则不应该这样做.这不仅会创建像这里这样的巨大、重复的文档页面,而且也不符合Deref
的精神,后者应该廉价地产生对指针类型中包含的值的引用.这只在web-sys中完成,因为它的类型实际上是用JavaScript编写的.
取而代之的是实现AsRef
,您可以随意多次实现它,它不会扰乱您的方法命名空间或文档,也不具有Deref
的严格含义.