使用Case(Switch)Ruby語(yǔ)句

在大多數(shù)計(jì)算機(jī)語(yǔ)言中,case或conditional(也稱為switch)語(yǔ)句將變量的值與幾個(gè)常量或literals的值進(jìn)行比較,并使用匹配的情況執(zhí)行第一條路徑。在Ruby中,它'更靈活(更強(qiáng)大)。

案例equality運(yùn)算符不是執(zhí)行簡(jiǎn)單的等式測(cè)試,而是為許多新用途打開(kāi)了大門(mén)。

但是,與其他語(yǔ)言有一些區(qū)別。在C中,switch語(yǔ)句是對(duì)一系列if和goto語(yǔ)句的一種替換。這些情況在技術(shù)上是標(biāo)簽,switch語(yǔ)句將轉(zhuǎn)到匹配標(biāo)簽。這表現(xiàn)出一種稱為"fallthrough,"的行為;因?yàn)閳?zhí)行到達(dá)另一個(gè)標(biāo)簽時(shí)不會(huì)'t停止。

這通常是避免使用休息聲明,但跌倒有時(shí)是故意的。另一方面,Ruby中的case語(yǔ)句可以看作是一系列if語(yǔ)句的速記。沒(méi)有跌倒,只有第一個(gè)匹配的情況將被執(zhí)行。

案件陳述的基本形式

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

正如你所看到的,這是一個(gè)類(lèi)似于if/else if/else條件語(yǔ)句的結(jié)構(gòu)。在這種情況下,從鍵盤(pán)輸入的名稱(我們稱之為)與when條款(即cases)中的每種情況進(jìn)行比較,第一個(gè)帶有匹配情況的塊將被執(zhí)行。如果它們都不匹配,將執(zhí)行else塊。

這里有趣的是如何將該值與每種情況進(jìn)行比較。如上所述,在C++和其他類(lèi)似C的語(yǔ)言中,使用簡(jiǎn)單的值比較。在Ruby中,使用案例等式運(yùn)算符。

請(qǐng)記住,案件平等算子左側(cè)的類(lèi)型很重要,案件是一個(gè)l保持左側(cè)。因此,對(duì)于條款中的每個(gè),Ruby將評(píng)估case===value,直到找到匹配項(xiàng)為止。

如果我們要輸入Bob,Ruby將首先評(píng)估"Alice"=="Bob",這將是錯(cuò)誤的,因?yàn)?em>String#===被定義為字符串的比較。接下來(lái),/[qrz]。+/i===&##34;Bob"將被執(zhí)行,這是錯(cuò)誤的,因?yàn)?strong>Bob不't以Q開(kāi)始,R或Z。

由于沒(méi)有任何情況匹配,Ruby將執(zhí)行else條款。

該類(lèi)型如何發(fā)揮作用

case語(yǔ)句的一個(gè)常見(jiàn)用法是確定值的類(lèi)型,并根據(jù)其類(lèi)型做一些不同的事情。雖然這打破了紅寶石'習(xí)慣性的鴨打字,但有時(shí)需要完成工作。

這通過(guò)使用Class#==(技術(shù)上,Module#===)運(yùn)算符來(lái)工作,該運(yùn)算符測(cè)試右側(cè)是否是?左側(cè)。

語(yǔ)法簡(jiǎn)單優(yōu)雅:

另一種可能的形式

如果省略了,則case語(yǔ)句的工作方式有所不同:它的工作方式幾乎與If/else If/else語(yǔ)句完全相同。在這種情況下,使用案例陳述而不是if陳述的優(yōu)點(diǎn)僅僅是美容。

更緊湊的語(yǔ)法

當(dāng)條款時(shí),有時(shí)會(huì)有大量的小。這樣的案例陳述很容易變得太大而不適合屏幕。在這種情況下(沒(méi)有pun意圖),您可以使用then關(guān)鍵字將When條款的正文放在同一行。

雖然這會(huì)產(chǎn)生一些非常密集的代碼,但只要每個(gè)當(dāng)條款非常相似時(shí),它實(shí)際上變得更具可讀性。

當(dāng)條款是u時(shí)應(yīng)該使用單行和多行對(duì)你來(lái)說(shuō),這是一個(gè)風(fēng)格問(wèn)題。但是,不建議將兩者混合使用-案例陳述應(yīng)遵循盡可能可讀的模式。

案例分配

像if語(yǔ)句一樣,case語(yǔ)句評(píng)估when條款中的最后一個(gè)語(yǔ)句。換句話說(shuō),它們可以用于作業(yè)中以提供一種表格。但是,請(qǐng)不要忘記case語(yǔ)句比簡(jiǎn)單數(shù)組或散列查找功能強(qiáng)大得多。這樣的表不需要'當(dāng)條款時(shí),不一定需要在中使用literals。

如果當(dāng)條款與其他條款不匹配時(shí),則case語(yǔ)句將評(píng)估為nil。

青少年生理健康知識(shí)