Rails中如何对Set集合使用switch case?现有代码无法运行求解决
在Rails中对Set集合正确使用case语句的解决办法
你的代码无法正常运行,核心问题是Ruby的case语句依赖===运算符做匹配逻辑,你的写法完全不符合这个规则:
- 原代码中
case fruits会把整个Set对象和when后的内容做===比较,Set["apple", "lemon"] === "apple"显然不成立; - 第二个
when里的fruits.include?("lemon")会先返回布尔值true,然后变成Set === true,同样不成立,最终只会走到else分支。
解决办法1:根据Set包含的元素执行逻辑
如果你的需求是检查Set中是否包含特定元素并执行对应逻辑,可以把case的匹配目标设为true(或省略目标),直接在when后写判断条件:
fruits = Set[] fruits.add("apple") fruits.add("lemon") case when fruits.include?("apple") eat when fruits.include?("lemon") eat_now else not_eat end
注意:case会按顺序匹配第一个为true的when分支,所以如果多个条件同时满足,只会执行第一个匹配的逻辑。
解决办法2:匹配整个Set的内容
如果你的需求是当Set完全等于某个特定集合时执行逻辑,可以直接在when后写对应的Set对象:
fruits = Set["apple", "lemon"] case fruits when Set["apple"] eat when Set["apple", "lemon"] # Set是无序集合,元素顺序不影响匹配结果 eat_now else not_eat end
内容的提问来源于stack exchange,提问作者Kerawos
相关产品推荐
相关产品推荐

