问题描述
我正在研究由伟大的 Dan Grossman 教授撰写的关于 Racket 的材料。他是华盛顿大学计算机科学系的一员。
在他关于 Racket 的讲义中的某个时候,他描述了使用
struct
和 #:transparent
属性。尽管事实
它显然有助于调试并与
REPL/交互式编程,他提到了代码模块化的可能损害。公平地说,这是引用:
首先,#:transparent 属性 使字段和访问器函数即使在外部可见 定义结构的模块。从模块化的角度来看,这是 有问题的风格,但它在使用 DrRacket 时有一大优势: 它允许 REPL 打印结构值及其内容而不是 而不仅仅是作为一个抽象值。例如,根据我们的定义 struct foo,(foo "hi" (+ 3 7) #f) 的结果打印为 (foo "hi" 10 #F)。如果没有 #:transparent 属性,它将打印为 #,并且每个调用 foo 函数产生的值都将打印 同样的方式。此功能在检查时变得更加有用 通过递归使用结构构建的值。
好的。 #:transparent
使即使在创建结构体定义的模块之外也可以看到内容,这意味着这将在其他球拍文件中可见。
然而,我不明白为什么这可能是甚至有问题的风格。说明这一主张可能存在的问题是什么?
例如,我在 file1.rkt
中使用了一些具有 (provide (all-defined-out))
的结构来导出所有内容。在名为 file2.rkt
的第二个文件中,我需要 file1.rkt
并使用 rackunit 运行多个测试。我没有看到“副作用”(或类似的东西,比如某种“印刷品”)。什么都不打扰我。
可能是格罗斯曼教授(杰出的)看到了我看不到的东西。
我错过了什么?有人能说明一个可能的问题吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)