Ruby 如果空字符串是真实的,那有什么好处呢?

Ruby 如果空字符串是真实的,那有什么好处呢?,ruby,boolean,string,Ruby,Boolean,String,在Ruby中,空字符串“对于条件句来说是真实的。我看到很多人在为这个事实挣扎。RubyonRails的blank?是克服这个问题的一种尝试。另一方面,当这样的规范变得方便时,它并不立即明显。有没有任何用例可以让这一事实变得方便,或者如果没有,会有理论上的问题?减少被认为是错误的事情的数量是一件好事。它简化了语言,简化了布尔规则,使它们更易于记忆和应用,从而减少了bug 只要看看PHP的一团糟:false、0、0.0、'0'、'、null和array()都是假的,每天都让很多人感到惊讶 如果要测试

在Ruby中,空字符串
对于条件句来说是真实的。我看到很多人在为这个事实挣扎。RubyonRails的
blank?
是克服这个问题的一种尝试。另一方面,当这样的规范变得方便时,它并不立即明显。有没有任何用例可以让这一事实变得方便,或者如果没有,会有理论上的问题?

减少被认为是错误的事情的数量是一件好事。它简化了语言,简化了布尔规则,使它们更易于记忆和应用,从而减少了bug

只要看看PHP的一团糟:
false
0
0.0
'0'
'
null
array()
都是假的,每天都让很多人感到惊讶


如果要测试空字符串,请测试空字符串。您应该知道您的变量是包含字符串还是布尔值,并能够进行相应的测试。

我认为Ruby的设计非常简单,并且false值越少,程序就越容易推理:“只有两个对象的布尔值为false,它们是false对象本身和nil对象。”

折衷的办法是,您可能需要编写
.blank?
更多内容。另一方面,有多少字段的最小长度为1?不多。如果您正在检查
.size>1
,那么“空字符串是真实的”是没有用的


每种语言都选择它的“范式”。例如,在SQL中,布尔运算实际上有3个值(真、假、空)。在Perl和C中,
0
为false。见鬼,在某些语言中,字符串“false”是false。

我想我找到了答案。也许,这是出于理论原因和效率。从理论上讲,在单个类的不同实例之间画一条线比在类之间画一条线更复杂,并且需要更多的计算。如果
是错误的,那么Ruby internal必须在每次有字符串处于某个条件时检查字符串的长度。相反,如果真实性可以仅仅由类来判断,这恰好是事实,那么它会更有效率。也许这也是为什么
false
true
不属于单个类
Boolean
而分别属于独立类的原因


另一种可能性是,
false
nil
只有一个实例,因此在Ruby内部处理这两个实例只需要检查指针/对象id,而字符串是可变的,并且需要更复杂的检查空性。

是否有处理
的用例?”
法尔西变得方便了吗?我认为这更令人惊讶。人们会考虑使用<代码>空白> < /COD> >将是一个用例。有很多。我从未见过有人对空字符串是真实的这一想法感到困惑,除非他们只编写过JavaScript。我认为几乎所有现存的Ruby程序都是将字符串视为真实的用例。如果希望变量在语义上为空,则希望它为
nil
。一个字符串就是一个字符串就是一个字符串,仅仅因为它是一个零长度的字符串不会改变这一点。你说的“一个用例”是什么意思?在Ruby代码的每一行中,变量作为条件进行测试都是一个用例<代码>x=我的_函数;如果我的函数返回字符串或false,则将x放入x。完成。减少错误值的数量肯定很方便。看看PHP的一团糟。值越小,布尔规则就越清晰、更容易理解和记忆。你的观点越少越好,但听起来还是有点弱。你能详细说明一下PHP中令人惊讶的地方吗?尤其是
'0'
(0作为字符串)是相当有争议的。它不是一个空字符串,但被认为是
false
。这似乎相当武断。那么为什么不
'false'
(字符串“false”)?因为这是一个非空字符串。因此规则是非空字符串,除了
'0'
为false。对于新手来说,这比
false
nil
false
,句号更难解释和保留。在PHP中,您必须真正考虑这样的事情:这个函数可能返回一个空数组,我真的希望这意味着
false
?或者这里的输入可能是
“0”
,而应该是
false
,但这里的重点不是
'false'
'0'
。它是关于
。也许是这样,但我的观点是越少越好。Ruby将这条线画得非常接近于
false
值的最小可能集。它只是尽可能地坚持“少即是多”的哲学<代码>“未被剪切。问马茨原因,没有人能告诉你。你的答案太抽象了。如果越少越好,那么为什么不只有一个而是两个虚假的因素呢?为什么两个可以而不是三个?