标签: truthiness

为什么不能将SplFileInfo转换为布尔值?

PHP的一个局限是对象总是评估为true.但是SplFileinfo(和Symfony的子类UploadedFile)表现不同:

$a = new ArrayIterator();       // or any other class
$b = new SplFileInfo(__FILE__); // file used is not important

if ($a) echo 'true';   // 'true'
if (!$a) echo 'false'; // nothing because $a is true

if ($b) echo 'true';   // 'true'
if (!$b) echo 'false'; // Catchable fatal error: Object of class 
                       // SplFileInfo could not be converted to boolean
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?测试在5.3和5.4.也发生在SplFileObject.可能的相关问题.和2011年的Symfony问题.

php spl truthiness

7
推荐指数
1
解决办法
1307
查看次数

(A == B == C)比较如何在JavaScript中进行比较?

我期待以下比较给出错误:

var A = B = 0;
if(A == B == 0)
    console.log(true);
else
    console.log(false);
Run Code Online (Sandbox Code Playgroud)

但奇怪的是它会回归false.

更奇怪的是,

console.log((A == B == 1)); 
Run Code Online (Sandbox Code Playgroud)

回报true.

这种"三元"比较如何运作?

javascript comparison truthiness

7
推荐指数
2
解决办法
4091
查看次数

为什么真相&&"字符串"返回"字符串"

假设我有类似的东西

true && true #=> true
Run Code Online (Sandbox Code Playgroud)

这是有道理的,所以我尝试类似的东西:

true && "dsfdsf" #=> "dsfdsf"
Run Code Online (Sandbox Code Playgroud)

这让我感到惊讶,因为我经常会做类似的事情,if something && something而且我一直认为那是评估为真,并且会回归真实.进一步的实验做的事情如下:

jruby-1.7.3 :009 > "ad" && "dsf"
 => "dsf" 
jruby-1.7.3 :010 > "ad" && "sdfd" && nil
 => nil 
jruby-1.7.3 :011 > "ad" && nil && "sdf"
 => nil 
Run Code Online (Sandbox Code Playgroud)

如果全部为真,或者它找到的第一个假值,Ruby似乎返回最后一个值.为什么这样做?这是一个正确的心理模型吗?

ruby truthiness

6
推荐指数
1
解决办法
1387
查看次数

理解JavaScript提升和truthy&falsy

我一直在阅读有关JavaScript吊装的消息.

Ben Cherry的JavaScript范围和吊装
Dmitry Soshnikov关于"吊装"的两个词

而且,更多关于JavaScript类型强制,真假测试: 真理,平等和JavaScript以及其他一些资源

在练习一些时,发现我遗漏了一些关于吊装的重要概念和一个变量'truthy&falsy.

1:'if'真实测试,带有重复变量声明

var foo = 1; 
function bar() { 
    if (!foo) { 
    alert('inside if');
        var foo = 10; 
    } 

} 
bar();
Run Code Online (Sandbox Code Playgroud)

O/P: inside if

怀疑: 'foo'值为'1',if(!foo)应该评估false并且不应该执行该块(引用来自上面的资源:提升仅影响var&function声明,但不影响执行).但为什么会显示该警报.如果我直接使用就不是这种情况false(如下面的no-tricks代码所示:代码片段#3)

2:'如果'真值测试没有重复变量声明

var foo = 1; 
function bar() { 
    if (!foo) { 
        alert('inside if');
    } 

} 
bar();
Run Code Online (Sandbox Code Playgroud)

o/p:没有输出; 意味着控制没有进入'如果'块
这是人们可以期待的

3:'if'使用带有重复变量声明的'false'

var foo = 1; 
function bar() { 
    if (false) { 
        alert('inside if');
        var foo = …
Run Code Online (Sandbox Code Playgroud)

javascript type-coercion truthiness hoisting

5
推荐指数
1
解决办法
1537
查看次数

Javascript Undefined String Property Tuthiness

我经常在我的Javascript中使用以下模式:

x = couldBeNullThing || valueIfItIsNull;
Run Code Online (Sandbox Code Playgroud)

因为它胜于:

x = couldBeNullThing ? couldBeNullThing : valueIfItIsNull;
Run Code Online (Sandbox Code Playgroud)

我也经常使用相同模式的轻微变体:

x = x || valueIfXIsNotDefined;
Run Code Online (Sandbox Code Playgroud)

这一切都很棒...除了问题,我最近发现:

foo = "";
//assert foo.x === undefined;
foo.x = foo.x || valueIfXIsNotDefined;
//assert foo.x === undefined;
Run Code Online (Sandbox Code Playgroud)

换句话说,如果你有一个字符串,你就做了string.aPropertyThatStringDoesntHave || foo,你既不会回头也不会回到实际价值; 相反,你得到了未定义.

谁能解释为什么会这样?在我看来,如果foo.x未定义,那么foo.x || anythingElse应该总是导致任何东西......所以为什么不呢?

javascript truthiness

5
推荐指数
1
解决办法
319
查看次数

返回变量的真实性而不是它的值?

考虑以下代码:

test_string = 'not empty'

if test_string:
    return True
else:
    return False
Run Code Online (Sandbox Code Playgroud)

我知道我可以构造一个条件表达式来做到这一点:

return True if test_string else False
Run Code Online (Sandbox Code Playgroud)

但是,当我宁愿返回布尔值时,我不喜欢测试布尔值是真还是假.我怎么才能恢复它的真实性?

python string boolean truthiness

5
推荐指数
1
解决办法
278
查看次数

为什么Python 3中的NotImplemented truthy?

这个问题的答案和讨论刺激了这个问题.以下代码段显示了问题的关键:

>>> bool(NotImplemented)
True
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  1. 为什么决定bool价值NotImplemented应该是True?它感觉是unpythonic.
  2. 我没有意识到有充分的理由吗?文档似乎只是说,"因为它是".
  3. 有没有以合理的方式使用它的例子?

推理为什么我认为它不直观(请忽略缺乏最佳实践):

>>> class A:
...     def something(self):
...         return NotImplemented
...
>>> a = A()
>>> a.something()
NotImplemented
>>> if a.something():
...     print("this is unintuitive")
...
this is unintuitive
Run Code Online (Sandbox Code Playgroud)

具有如此负面含义(缺乏实施)的东西似乎是一种奇怪的行为.

相关文字来自:

未实现

这应该由二进制特殊的方法被返回(如特殊的值__eq__(),__lt__(),__add__(),__rsub__(),等等),以指示该操作不相对于另一种类型的实施; 可通过就地二进制特殊的方法(例如被返回__imul__(),__iand__()为了相同的目的,等等).它的真实价值是真实的.

- 来自Python Docs

编辑1

为了澄清我的立场,我觉得NotImplemented能够评估一个布尔值本身就是一种反模式.我觉得Exception更有意义,但流行的想法是在评估不同对象之间的比较时,出于性能原因选择常量单例.我想我正在寻找令人信服的理由,为什么这是选择的"方式".

python boolean python-3.x truthiness

5
推荐指数
1
解决办法
185
查看次数

YARD 真实性公约

是否有约定表明 YARD 样式文档中的参数仅用于其“真实性”状态,即您只想知道它是否false真实nil

Truthy下面通常用什么来代替?

# @param [String] name
# @param [Truthy] admin_status 
def create_user(name, admin_status)
  # code goes here
end
Run Code Online (Sandbox Code Playgroud)

我在文档中找到的最接近的是布尔值,这并不是我真正想要的。

ruby yard truthiness

4
推荐指数
1
解决办法
2135
查看次数

为什么javascript中的'false'真实?

我知道一个空字符串在javascript中是假的,而一个非空字符串在javascript中是真的.

但是,为什么'false'javascript 中的truthy,规范中是否有任何明确的内容?是性能问题还是存在您希望字符串'false'表示的情况true

javascript casting boolean truthiness

4
推荐指数
3
解决办法
201
查看次数

4
推荐指数
1
解决办法
84
查看次数