记录私有泛型类型的公共具体变体

2023-12-31

In 我的另一个问题 https://stackoverflow.com/q/70102943/857390,我问如何只公开公开一个具体的变体(Foo<u32>)私有泛型类型(Foo<T>)。建议的解决方案如下:

mod internal {
    /// Private documentation of `Foo`.
    pub struct Foo<X> {
        /// Private documentation of `x`.
        pub x: X,
    }

    impl Foo<u32> {
        pub fn foo() -> u32 {
            32
        }
    }

    impl Foo<u8> {
        pub fn foo() -> u8 {
            8
        }
    }
}

/// Public documentation of `FooBar`.
pub type FooBar = internal::Foo<u32>;

这是有效的,因为公共 API 只包含FooBar, 但不是Foo。然而,从文档的角度来看,它是缺乏的。这是输出cargo doc for FooBar:



如你看到的,

  • 私人类型Foo出现在文档中,但它不是链接,并且Foo没有单独的
  • 私人文件均不Foo,也不属于Foo.x显示

因此,该文档并不是真正有用。显然我可以在文档中添加更多信息FooBar,但这仍然不会使文档成为FooBar看起来像普通的struct.

通过这种方法,文档FooBar显然不如“等效”定义FooBar像这样:

/// Public documentation of `FooBar`.
pub struct FooBar {
    /// Public documentation of `x`.
    x: u32,
}

我将“等效”放入引号中,因为我确实假设从编译器的角度(显然是cargo doc),这两个定义FooBar是完全不同的。我的问题是我的文档的读者不必关心这种差异。

在这种情况下有没有办法实现“自然”文档?

我很高兴使用完全不同的方法来隐藏通用的Foo定义(如果有必要的话)。


您可以使用#[cfg(doc)]伪造该物品:

#[cfg(not(doc))]
pub type FooBar = internal::Foo<u32>;
#[cfg(doc)]
/// Public documentation of `FooBar`.
pub struct FooBar {
    /// Public documentation of `x`.
    pub x: u32,
}

但这将隐藏所有impls(除非您也复制它们)和重复的代码。所以,不要这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录私有泛型类型的公共具体变体 的相关文章

随机推荐

  • 如何获取调用函数的名称?

    我正在使用 gnu 工具链 如何在运行时找到函数的调用者 例如 许多函数使用函数指针调用函数 B 现在 每当 B 被呼叫时 我想打印呼叫者的姓名 我需要这个来调试某个问题 如果您使用的是 GNU 则可以使用回溯 http www kerne
  • 关于操作系统,关于页表条目状态位

    在电影里社交网络马克 扎克伯格上课时 老师问了这样一个问题 假设我们有一台计算机 具有 16 位虚拟地址 页大小为 256 字节 系统使用从地址十六进制 400 开始的一级页表 您可能需要 DMA 直接内存访问 在您的 16 位系统上 谁知
  • 捕获 Mac 屏幕

    用cocoa录制mac屏幕的最佳方法是什么 我知道苹果开发人员参考库中有很多示例 SonOfGrab 解释了如何使用石英捕获屏幕 但也指出使用它每秒捕获许多帧的速度不够快 OpenGLScreenSnapshot 具有相同的结果 但速度也不
  • 如何使用 TortoiseSVN 根据修订版之间的差异创建补丁?

    我正在开发一个项目 其中使用 Subversion 来维护版本控制 我使用 TortoiseSVN 访问项目存储库 在项目的两个修订版之间进行了一些更改 我们将其称为 rev1 和 rev2 我希望能够将这些更改应用到暂时无法访问存储库的工
  • Rspec:如何在辅助规范中规范 request.env?

    在我的帮助模块中 我有 def abc url if request env HTTP USER AGENT do something end end 在我的规范文件中 我有 describe abc do before each do m
  • 如何利用 NumPy 的功能来修复和优化这段非常简单的“生命游戏”代码?

    import numpy as np from matplotlib import pyplot as plt from matplotlib import animation from random import randint arra
  • Java 中的继承和转换

    我有一个关于 Java 中的继承和转换的问题 我有以下两个示例类和一个测试类 我在课后陈述我的问题 public class Automobile public int var public Automobile var 1 public
  • Python webapp2:重定向回来

    我正在使用谷歌应用程序引擎作为基本应用程序 该场景很简单 我单击 注销 我希望我的注销处理程序将我重定向回我来自的页面 我该如何实现这一目标 谢谢 When 创建注销网址 https developers google com appeng
  • 仅在 Chrome 上,Angular 项目中的控制台上出现 zone.js 违规警告

    我有一个使用创建的 Angular 4 项目 angular cli 在开发模式下运行应用程序时 我在控制台中收到这些警告 zone js 1489 Violation setTimeout handler took 209ms 2 Vio
  • 列中的行

    我有这张表 Id Kind 1 MODEL 1 MOTOR 2 MODEL 2 MOTOR 3 MOTOR 4 MODEL 我想插入到另一个表中 IdModel IdMotor 1 1 1 2 1 3 2 1 2 2 2 3 4 1 4 2
  • C++ 规范是否说明了如何在 static_cast/const_cast 链中选择类型以用于 C 样式转换?

    这个问题涉及我在尝试回答时在 C 规范中注意到的一些内容这是关于 C 风格强制转换和类型转换的早期有趣问题 https stackoverflow com q 39215125 501557 C 规范在第 5 4 节中讨论了 C 风格的强制
  • TensorFlow:`tf.data.Dataset.from_generator()` 不适用于 Python 3.x 上的字符串

    我需要迭代大量图像文件并将数据提供给张量流 我创建了一个Dataset返回由生成器函数生成文件路径名作为字符串 然后使用将字符串路径转换为图像数据map 但它失败了 因为生成字符串值不起作用 如下所示 有解决办法或解决这个问题吗 2017
  • 为 NestJs REST API 创建 DTO、BO 和 DAO

    我想开始使用 NestJs 创建 REST API 但我不确定如何设置可扩展层通信对象 所以从关于如何的文档开始吧 https docs nestjs com controllers我想出了一个UsersController处理 HTTP
  • javascript_include_tag :默认值不起作用

    我正在将一个应用程序迁移到 Rails 3 以下内容 我在一些地方看到推荐的内容 不起作用 就我而言 它扩展到 这会导致 404 据我了解 defaults 不应该包含名为 defaults js 的文件 它应该包含一些基本的东西 比如pr
  • 如何将R闪亮集成到当前应用程序中

    我想知道是否可以将 R闪亮集成到当前网站 PHP 或 RoR 中 我只是想利用 R Shiny 的强大功能将应用程序嵌入到当前网站中 但据我所知 Shiny 需要在自己的服务器上运行 而不是在 Apache 上运行 是否可以在不使用 ifr
  • 找到多边形内最大的矩形 - Python

    有没有一种简单的方法来获得适合形状的最大直立矩形 我正在使用 OpenCV http docs opencv org master dd d49 tutorial py contour features html gsc tab 0 htt
  • 将字符串转换为 PHP 中定义的常量

    假设我已经定义了常量ERROR 0如下 define ERROR 0 An error occurred 现在 假设我有字符串 ERROR 0 但我想将其转换为常量ERROR 0这样我就可以获得字符串 发生错误 我怎样才能做到这一点 Tha
  • Graphql 数据建模:扩展类型和接口

    这是一个非常基本的问题 但是如何调用扩展类型或接口 所有文档都指向使用extend type Person添加基于人员的字段 我希望它能像这样工作 Employee extend type Person salary Int 但文档表明它是
  • 垫菜单始终出现在页尾

    我实施了mat menu来自有角度的材料 菜单始终出现在页面末尾 代码如下 我尝试过设置z index和别的css属性 但菜单没有出现在原来应该出现的位置 HTML
  • 记录私有泛型类型的公共具体变体

    In 我的另一个问题 https stackoverflow com q 70102943 857390 我问如何只公开公开一个具体的变体 Foo