在Racket中,版本号存储在info.rkt
中软件包的根目录中。该文件如下所示:
#lang info
....
(define version "0.5")
问题是,我如何以编程方式获取该软件包的版本?
version
函数和库似乎专门针对Racket版本,而不是任何特定的软件包。
对于单个收集包,我可以使用get-info
函数:
> ((get-info '("my-single-collection-package")) 'version)
"0.5"
但是,如果程序包中有多个集合,那就行不通了。
> ((get-info '("my-multi-collection-package")) 'version)
racket/racket/collects/racket/private/collect.rkt:11:53: collection-path: collection not found
collection: "my-multi-collection-package"
in collection directories:
/home/leif/.racket/development/collects
/home/leif/racket/racket/collects
... [216 additional linked and package directories]
那么我如何以编程方式从软件包中获取版本字符串?
答案 0 :(得分:1)
您在正确的道路上。您仍然可以使用get-info
从信息文件中检索数据,但是可以使用get-info/full
,它允许您将路径传递到信息文件的目录。在这种情况下,包的基本目录。
要注意的是,您只需要找到文件包所在的文件夹即可。为此,您可以使用pkg-directory
,它使用包的名称并返回其位置:
> (pkg-directory "my-pkg")
#<path:/home/leif/racket/racket/share/pkgs/my-pkg">
因此,您现在可以将其传递到get-info/full
并将结果应用于'version
以获取软件包的版本:
> ((get-info/full (pkg-directory "my-pkg")) 'version)
"0.5"