在Ruby的Case表达式中使用Lambda/Proc
19 Mar 2015
大部分的Ruby开发者都知道在case
表达式中的when
后面可以使用直接量,类,范围(Range)和正则表达式:
你可能也知道在case
中实际是使用===
方法来进行比较。Ruby会将上面的代码象下面一样执行:
当然你可能不知道Proc
类中也定义了===
方法,用于执行proc
或者lambda
。相当于把===
右边的参数作为参数传递给Proc#call
方法,例如:
这样我们就可以在when
的后面使用proc
或lambda
,下面是一个非常简单的例子:
也可以直接在when
的后面定义lambda
,例如:
因为proc
或lambda
的闭包特性,所以可以给lambda
的定义方法传递参数,进行更强大的比较功能:
下面是一个在具体项目中使用的用于对Array
进行模式匹配的方法:
使用时就可以像下面这样对Array
进行匹配:
本文参考:
Lambdas/Procs in Case Expressions