首页 ruby中的case...when语法
文章
取消

ruby中的case...when语法

参考How to write a switch statement in Ruby?

其实用Rails写个业务逻辑不算复杂的app根本用不上ruby的很多高级语法,更别说<meta programming in ruby>中的东西了(凡是打上meta programming标签的都不是什么简单的东西,参考c++/lisp)。ruby中的case…when语句和c/c++中的switch…case其实根本不是一回事。<Programming in Ruby 2nd>:

case operates by comparing the target with each of the comparison expression after the when keywords. This test is done using comparison === target.

也就是说case…when用的不是==操作符,不是使用相等逻辑去判断,而是使用===运算符。===运算符从C++的角度简单来说就是判定is-a关系,例如

Fixnum === 1
String === "hello"
(1..3) === 2

1 is a Fixnum,hello is a String,2 is a (1..3) (in the range of)。比较让人产生误解的,大概就是1===1也为true。所以理解起来,也不纯碎是is-a关系。

case a
when Fixnum
    puts "fixnum"
when String
    puts "string"
when (1..3)
    puts "between 1 and 3"
else
    puts "default"
end

最后,作为一种functional-like language,其语句也算是表达式,意即也有返回值。case..when的返回值就是执行的分支的返回值。

本文由作者按照 CC BY 4.0 进行授权

HTML中table的高亮以及tooltip

为octopress每篇文章添加一个文章信息