【问题标题】:Stuck on Exercise 28 of Learn Ruby Hard Way - different returns in irb坚持学习 Ruby Hard Way 的练习 28 - irb 中的不同回报
【发布时间】:2016-08-02 22:30:23
【问题描述】:

目前正在做练习 28 链接:http://learnrubythehardway.org/book/ex28.html

在“学生常见问题”下,有以下内容:

问题

为什么 "test" && "test" 返回 "test" 或 1 && 1 返回 1 而不是 true?

回答

Ruby 和许多语言都喜欢将操作数之一返回到它们的布尔表达式,而不仅仅是 true 或 false。这意味着如果您执行 false && 1,您将获得第一个操作数 (false),但如果您执行 true && 1,您将获得第二个操作数 (1)。玩一下这个。


但是,即使在阅读了上面的答案后,我仍然无法理解为什么

false && 1 返回 'false'

同时

true && 1 返回 '1'

在 irb 中。

【问题讨论】:

    标签: ruby


    【解决方案1】:

    前言:在 Ruby 中,只有 false 本身和 nilfalse。其他所有内容都评估为true

    false && 1

    e1e2 都必须是 true 才能使整个表达式计算为 truee1false 所以不需要评估 e2。 e1 (false) 被返回。

    true && 1

    e1true,所以我们需要评估甚至 e2e211 被返回。

    【讨论】:

    • 好的,我想我明白了。如果 'false' 是等式的一部分,那么无论如何都返回 false。如果 'true' 是其中的一部分,而不是返回 true,它将返回 '1'。
    • 是的,但这仅适用于 &&。如果我们有false || 1,它也会计算 e2,因为只有一个 true 就足以使整个表达式为 true。
    • 旁注:在 Ruby 世界中,有一个习惯叫 nilfalsefalsey,而其他的则是 truthy。否则,您的[完全正确]答案中就会出现混乱。比较:“e1e2 都必须是 truthy”。
    • 这绝对比我的意大利语好 :) 使用 falsey 而不是 false 的主要原因是 nil == false 的计算结果为 false,使得 nil 成为 [OMG,那是很难拼写!] 不是false,但仍然是falsey。无论如何,我希望你明白这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2012-02-17
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多