出于某种原因,我查看了/usr/bin/hg
并看到了看起来有点奇怪的代码:
libdir = '@LIBDIR@'
if libdir != '@' 'LIBDIR' '@':
...
if语句看起来像一个同义反复/矛盾,因为在Python中
'@LIBDIR@'
应该始终等于'@' 'LIBDIR' '@'
,所以代码永远不会运行在什么情况下'@LIBDIR@'
会变成其他的东西? 最佳答案
我对Mercurial本身并不熟悉,但对我来说,@LIBDIR@
显然是要通过自动搜索和替换(例如在安装脚本中)来替换其他字符串的if
语句检查是否已执行此操作:搜索在@LIBDIR@
中找不到'@' 'LIBDIR' '@'
,因此这是一种比较变量值与其原始占位符值的方法,而不会触发if
语句中占位符的替换。
换句话说,if
语句询问,“如果在安装时指定了库路径,那么验证它并将其添加到Python模块搜索路径中。”
我个人会把这些信息放在一个配置文件中,因为这对用户来说更容易编辑,也不太可能被更新所破坏,但是看起来Mercurial正在使用源代码修正方法进行配置。