我已经看到了多种用于在 INI 文件中设置布尔值的方法:
variable = true
variable = 1
variable = on
variable = yes
哪种方式是最规范、最常见和/或首选的方式?
我已经看到了多种用于在 INI 文件中设置布尔值的方法:
variable = true
variable = 1
variable = on
variable = yes
哪种方式是最规范、最常见和/或首选的方式?
INI 文件没有规范,但不管它值多少钱,我将列出我所知道的语言的一些实现的行为。
Python 的内置configparser
模块提供了一个getboolean
行为如下:
接受的值...是
'1'
,'yes'
,'true'
, and'on'
,它们会导致该方法返回True
,以及'0'
,'no'
,'false'
, and'off'
,会导致它返回False
。
parse_init_file
另一方面,在 PHP中:
字符串值"true"、"on"和"yes"被转换为TRUE。"false"、"off"、"no"和"none"被认为是FALSE。
同时,.NET 没有对 INI 解析的内置支持,但其最流行的 INI 解析库ini-parser不提供对值的自动解析的任何支持,并将它们全部作为字符串返回。它的Getting Started示例显示了使用 .NET 解析布尔值Boolean.Parse
,它将接受字符串"true"
和"false"
(任何大小写)并在给出其他任何内容时抛出异常。
总之:INI解析器的不同实现之间在这个问题上绝对没有一致性。
我会推荐:
1
and 0
。这取决于 ini 文件的解析器。这些值始终是字符串。
true/false:在 C# 中,我可以将 true 和 false 字符串直接转换为 bool。等于可读性和易于转换。更少的代码。
0/1:在转换为 bool 之前,我必须将字符串 0 和 1 转换为 int。较小的 ini 文件大小。可读性较差。更多代码。
是/否和开/关我将不得不使用 if/switch 语句。可读。更多代码。
我的首选方式是真/假。对象序列化为真/假,即使它存储为 0/1,您也可以将真/假与 sql 位类型一起使用。所以唯一的缺点是尺寸在大多数情况下可能很小。