if some_condition then some_consequence else another_consequence end
# can also be written as
if some_condition; some_consequence else another_consequence end
# can also be written as
if some_condition
some_consequence else another_consequence end
# but is most commonly written as
if some_condition
some_consequence
else
another_consequence
end
3条答案
按热度按时间nbnkbykc1#
if
是一个Control Expression(不太具体地说是一个关键字)。这些都是语言级别的结构, Bootstrap 的流程,就像Ruby中的其他控制结构(
else
,elsif
,case
等)一样,if
不能被传递,它的值是计算表达式的结果。它没有类型或类,因为它不是值。
tyu7yeag2#
这个问题毫无意义。(我不是说这是对提问者的侮辱,而是这个词的技术意义。
当你阅读一本书时,故事是通过在你的脑海中“解释”页面上的句子而创造出来的。但这一页上的句子并不是故事。这就像问哈利波特书中的“如果”是哪个角色一样。它不是,它只是用来写故事的英语语法的一部分。
这就是我所说的“无意义”:这是一个 * 类别错误 *。
if
是一个关键字。关键字是一个特殊的语法结构,它允许解析器更容易地解析程序的语法。这就是它的全部。它是语言语法结构的一部分,而不是运行程序中的值。一些(但不是所有)关键字,或者更准确地说,由这些关键字形成的表达式,具有特定的 * 语义 *(含义)。
例如表述
大致有以下语义:
1.计算表达式
some_condition
。1.让C表示该评估的结果值。
1.执行以下步骤之一:
1.如果C是 truthy,即C不是两个特殊值
nil
或false
之一:1.计算表达式
some_consequence
。1.让R表示该评估的结果值。
1.如果C是 falsey,即C是两个特殊值
nil
或false
之一:1.计算表达式
another_consequence
。1.让R表示该评估的结果值。
1.计算整个条件表达式的结果值是R。
Aside:这是在哪里定义的?
不幸的是,与许多其他编程语言不同,Ruby语言规范并不作为一个文档存在于一个地方。Ruby没有一个正式的规范来定义某些语言结构的含义。
有几个资源,其中的 * 总和 * 可以被认为是Ruby编程语言的规范。
这些资源包括:
String
s(因为它们在Ruby 1.8和Ruby 1.9之间发生了重大变化)。它显然也没有指定在ISO Ruby规范编写之后添加的功能,例如Ractors或Pattern Matching。ruby/spec
-请注意,ruby/spec
还远远没有完成。然而,我非常喜欢它,因为它是用Ruby而不是“ISO标准”编写的,这对于Rubyist来说更容易阅读,而且它也是一个可执行的一致性测试套件。以下是ISO/IEC 30170:2012 * 信息技术-编程语言- Ruby* 规范中 *
if
表达式 * 的定义:11.5.2.2.2
if
表达式语法
if-expression*::
then-clause*::
|
then
* 复合语句 *then
compound-statementelse-clause*::
elsif-clause*::
语义
1.对 expression 求值。让V为结果值。
1.如果V是一个较真实的对象,则计算 * then子句 * 的 compound-statement。if-expression 的值是结果值。在这种情况下,elsif-clauses和 else-clause(如果有的话)不会被求值。
1.如果V是一个伪对象,并且没有 elsif-clause 和 else-clause,那么 if-expression 的值是
nil
。1.如果V是一个伪对象,并且如果没有 elsif-clause 但是有一个 else-clause,那么计算 else-clause 的 compound-statement。if-expression 的值是结果值。
1.如果V是一个伪对象,并且如果有一个或多个 elsif-clauses,则按如下方式计算 elsif-clauses的序列:
1.按照每个 elsif-clause 的 expression 在程序文本中出现的顺序对其求值,直到有一个 elsif-clause 的 expression 求值为true对象。让T成为这个 elsif-clause。
1.如果T存在,则计算其 then-clause 的 compound-statement。if-expression 的值是结果值。其他 elsif-clauses和T后面的 else-clause(如果有的话)不会被计算。
1.如果T不存在,并且如果存在 else-clause,则计算 else-clause 的 compound-statement。if-expression 的值是结果值。
1.如果T不存在,并且没有 else-clause,则 if-expression 的值为
nil
。这里是
language/if_spec.rb
中ruby/spec定义的链接koaltpgm3#
像“string”或“boolean”这样的类描述了数据的类型。
if
、else
等。不是数据类型,但通常被称为“关键字”。