##1、概述
“===”是case equality operator,用于在case/when语句中判断是否进入某个分支的依据。
个人理解,这个操作符判断的是,符号右边的对象能否被划入到左边对象表示的含义范围内,如果是,则判断为true,不是则为false。
##2、实验验证:
| 左边 | 右边 | 结果 | 原因 |
|:----------:|:----------:|:----------:|:----------:|
|1|1|true|相同的对象|
|1.0|1|true|表示的对象实际是同一个|
|“1”|1|false|左边是字符串,右边是数值|
|(1..2)|2|true|2在范围(1..2)中|
|(1...2)|2|false|2不包含在范围(1...2)中|
|Float|5.0|true|5.0是浮点型数值|
|/a|e|i|o|u/|hello|true|hello中能匹配到元音字母|
|hello|/a|e|i|o|u/|false|hello不全由元音字母组成|
查询核心模块Kernel API可知:如果是Float类型则通过Kernel.Float(字符串)判断,这里不能转为浮点数则会抛出异常。你只需再捕获一下输出自己的信息就行。
如果不想多次随机并检测是否已经存在, 那可以先生成你要的范围, 然后用sample
当然这么做并不适用于范围超级大的时候
range = (1..1000).to_ap range.sample(5)
以上可以取得5个不重复的1-1000内的数字