使用case(switch)ruby语句

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

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

woman working at laptop

不再执行简单的相等性测试,而是使用case相等运算符,为许多新用途打开了大门。

但与其他语言有一些不同。在C语言中,switch语句是一系列if和goto语句的替换。这些案例在技术上是标签,switch语句将转到匹配的标签。这显示了一种称为“fallthrough”的行为,因为当它到达另一个标签时,执行不会停止。

通常使用break语句可以避免这种情况,但有时会故意出错。另一方面,Ruby中的case语句可以看作是一系列if语句的简写。没有故障,只会执行第一个匹配的案例。

案例陈述的基本形式

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

正如您所看到的,它的结构类似于if/else if/else条件语句。在本例中,从键盘输入的名称(我们称之为值)将与when子句中的每个case(即cases)进行比较,并将执行第一个带有匹配case的when块。如果它们都不匹配,将执行else块。

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

请记住,大小写相等运算符左侧的类型很重要,并且大小写始终位于左侧。因此,对于每个when子句,Ruby将计算case===value,直到找到匹配项为止。

如果我们输入Bob,Ruby将首先计算“Alice”==“Bob”,这将是错误的,因为字符串#===定义为字符串的比较。接下来,/[qrz].+/i===“Bob”将被执行,这是错误的,因为Bob不是以Q、R或Z开头的。

由于没有匹配的案例,Ruby将执行else子句。

类型如何发挥作用

case语句的一个常见用法是确定值的类型,并根据其类型执行不同的操作。虽然这打破了Ruby习惯的duck类型,但有时还是需要完成一些事情。

这是通过使用类#==(从技术上讲,是模块#==)操作符来实现的,该操作符测试右侧是否为?左手边。

语法简单而优雅:

另一种可能的形式

如果省略该值,case语句的工作方式就有点不同:它的工作方式几乎与If/else If/else语句完全相同。使用case语句比使用​在这种情况下,如果陈述仅仅是表面的。

更简洁的语法

有时会有大量的小when子句。这样的案例陈述很容易变得太大而无法在屏幕上显示。在这种情况下(没有双关语),您可以使用then关键字将When子句的主体放在同一行上。

虽然这使得一些代码非常密集,但只要每个when子句非常相似,它实际上就变得更具可读性。

当您决定使用单行和多行When子句时,这是一个风格问题。但是,不建议将两者混合使用——案例语句应遵循尽可能可读的模式。

案例分配

与if语句一样,case语句计算到when子句中的最后一个语句。换句话说,它们可以在作业中提供一种表格。但是,不要忘记case语句比简单的数组或散列查找功能强大得多。这样的表不一定需要在when子句中使用文本。

如果没有匹配的when子句和noelse子句,那么case语句的计算结果将为nil。

  • 发表于 2021-10-08 04:55
  • 阅读 ( 155 )
  • 分类:数学

你可能感兴趣的文章

红宝石(ruby)和python(python)的区别

...优点是这些语言支持面向对象编程(OOP)。OOP方法有助于使用对象对一个或一组程序进行建模。Ruby和Python的关键区别在于Ruby主要用于web开发,而Python主要用于各种应用程序,包括web开发。Python还常用于科学计算、数据科学应用...

  • 发布于 2020-10-19 17:41
  • 阅读 ( 338 )

如果还有(if else)和转换(switch)的区别

...的控制流。如果程序员想检查单个变量的值,那么他可以使用switch语句。本文讨论if-else和switch之间的区别。if-else和switch的关键区别在于,在if-else中,执行块基于if语句中表达式的求值,而在switch中,要执行的语句取决于传递给...

  • 发布于 2020-10-24 02:27
  • 阅读 ( 310 )

使用arduino自定义快捷键

...钮,一个10K欧姆电阻,和适当的连接线为每个按钮,你想使用。我使用樱桃MX机械键盘开关的实际快捷键按钮,虽然任何开关会做,只要它是暂时的,而不是锁定。 ...

  • 发布于 2021-03-17 01:02
  • 阅读 ( 570 )

如何使用powershell生成随机姓名和电话号码

...该数据集需要表示个人识别信息(PII)时,您通常不希望使用表示实际人员的真实数据。在这里,我们将带您了解如何使用PowerShell为此类场合生成随机姓名和电话号码列表。 你需要什么 在开始之前,您应该掌握一些工具和信...

  • 发布于 2021-04-11 08:59
  • 阅读 ( 267 )

否则(if else)和转换(switch)的区别

if-else和switch的主要区别在于,在if-else中,要执行的块取决于if语句中的表达式,而在switch中,执行取决于传递给它的单个变量。 在编程中有各种决策结构。如果还有两个,就换。如果还有,有两个街区,好像和其他。“if”块...

  • 发布于 2021-06-30 22:25
  • 阅读 ( 193 )

while循环(while loop)和执行while循环(do-while loop)的区别

...体之前测试条件。可以在另一个while、for或do while语句中使用至少一个圆。这个动作重复,直到这个短语被证明是错误的。否则,整个过程就会不断重复。在某些情况下,它可能会使系统崩溃,因为值永远不会变为假,因此系统...

  • 发布于 2021-07-08 13:59
  • 阅读 ( 500 )

有(having)和where子句(where clause)的区别

关键区别:Having和Where都是可以在SQL中使用的子句。“Where”子句首先应用于表中的各行,使用它将满足子句中条件的行分组在一起。然后将Having子句应用于结果集中的行。满足Having子句中条件的组将出现在查询输出中。 Having...

  • 发布于 2021-07-12 05:30
  • 阅读 ( 208 )

if语句(if statement)和switch语句(switch statement)的区别

关键区别:if语句is使用一个布尔表达式来执行函数,并且经常用于一次检查多个条件。switch语句使用int表达式来检查每个原因是否满足条件,如果满足条件,则语句将执行代码。 许多初出茅庐的工程师和编程爱好者在开始学...

  • 发布于 2021-07-12 13:00
  • 阅读 ( 146 )

免费电子书教ruby编程

...这种方法不同于C++或java,其中存在基元类型,或者某些语句不返回值。我不是程序员,但我喜欢作者轻松幽默的主题(例如,有一个第0章,它的标题是“chu在说什么,先生?”)这看起来是Ruby新手,甚至对Ruby有点熟悉的人的必...

  • 发布于 2021-08-01 14:10
  • 阅读 ( 103 )

ruby中的全局变量

...它们以$(美元符号)字符开头表示。然而,全局变量的使用通常被认为是“非Ruby”,并且您很少看到它们。 定义全局变量 全局变量的定义和使用与任何其他变量一样。要定义它们,只需给它们赋值并开始使用它们。但是,...

  • 发布于 2021-09-05 06:00
  • 阅读 ( 175 )
农妇山泉有点辣
农妇山泉有点辣

0 篇文章

相关推荐