使用Case(Switch)Ruby语句

在大多数计算机语言中,case或conditional(也称为switch)语句将变量的值与几个常量或literals的值进行比较,并使用匹配的情况执行**条路径。在Ruby中,它'更灵活(更强大)。

案例equality运算符不是执行简单的等式测试,而是为许多新用途打开了大门。

但是,与其他语言有一些区别。在C中,switch语句是对一系列if和goto语句的一种替换。这些情况在技术上是标签,switch语句将转到匹配标签。这表现出一种称为"fallthrough,"的行为;因为执行到达另一个标签时不会't停止。

这通常是避免使用休息声明,但跌倒有时是故意的。另一方面,Ruby中的case语句可以看作是一系列if语句的速记。没有跌倒,只有**个匹配的情况将被执行。

案件陈述的基本形式

案例陈述的基本形式如下。

正如你所看到的,这是一个类似于if/else if/else条件语句的结构。在这种情况下,从键盘输入的名称(我们称之为)与when条款(即cases)中的每种情况进行比较,**个带有匹配情况的块将被执行。如果它们都不匹配,将执行else块。

这里有趣的是如何将该值与每种情况进行比较。如上所述,在C++和其他类似C的语言中,使用简单的值比较。在Ruby中,使用案例等式运算符。

请记住,案件平等算子左侧的类型很重要,案件是一个l保持左侧。因此,对于条款中的每个,Ruby将评估case===value,直到找到匹配项为止。

如果我们要输入Bob,Ruby将首先评估"Alice"=="Bob",这将是错误的,因为String#===被定义为字符串的比较。接下来,/[qrz]。+/i===&##34;Bob"将被执行,这是错误的,因为Bob不't以Q开始,R或Z。

由于没有任何情况匹配,Ruby将执行else条款。

该类型如何发挥作用

case语句的一个常见用法是确定值的类型,并根据其类型做一些不同的事情。虽然这打破了红宝石'习惯性的鸭打字,但有时需要完成工作。

这通过使用Class#==(技术上,Module#===)运算符来工作,该运算符测试右侧是否是?左侧。

语法简单优雅:

另一种可能的形式

如果省略了,则case语句的工作方式有所不同:它的工作方式几乎与If/else If/else语句完全相同。在这种情况下,使用案例陈述而不是if陈述的优点仅仅是美容。

更紧凑的语法

条款时,有时会有大量的小。这样的案例陈述很容易变得太大而不适合屏幕。在这种情况下(没有pun意图),您可以使用then关键字将When条款的正文放在同一行。

虽然这会产生一些非常密集的代码,但只要每个条款非常相似时,它实际上变得更具可读性。

当条款是u时应该使用单行和多行对你来说,这是一个风格问题。但是,不建议将两者混合使用-案例陈述应遵循尽可能可读的模式。

案例分配

像if语句一样,case语句评估when条款中的最后一个语句。换句话说,它们可以用于作业中以提供一种表格。但是,请不要忘记case语句比简单数组或散列查找功能强大得多。这样的表不需要'当条款时,不一定需要在中使用literals。

如果当条款与其他条款不匹配时,则case语句将评估为nil

青少年生理健康知识