You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中基于特征函数的FunSet类型别名实现相关疑问

问题核心概念解析

1. FunSet类型定义的含义

FunSet是一个类型别名,本质上是给Int => Boolean这个函数类型起了更贴合业务语义的名字。

特征函数(也叫指示函数)是集合论的经典概念:对任意集合S,它的特征函数接收一个元素,返回布尔值:元素属于S则返回true,否则返回false。

这里没有用哈希表、树等结构存储集合元素,而是直接用特征函数本身表示集合,只存「判断元素是否属于集合」的规则,不存具体元素。
举个例子:

  • 所有正整数的集合对应的FunSet是(x: Int) => x > 0
  • 所有偶数的集合对应的FunSet是(x: Int) => x % 2 == 0

2. contains函数的判断逻辑

def contains(s: FunSet, elem: Int): Boolean = s(elem)的逻辑非常直接:
因为s本身就是「接收Int返回Boolean」的特征函数,要判断elem是否属于集合,直接把elem作为参数传入s执行,得到的返回值就是判断结果。
比如调用contains((x: Int) => x > 0, 3),本质就是执行(x: Int) => x > 0)(3),最终返回true。

3. singletonSet函数的实现

单元素集合的特征是:只有你传入的指定元素属于集合,其他所有元素都不属于。对应特征函数的逻辑就是:接收一个输入参数,判断该参数是否等于你要创建的单元素值。
由于FunSet本身是函数类型,所以你需要返回一个函数作为结果,正确实现如下:

def singletonSet(elem: Int): FunSet = (x: Int) => x == elem

也可以用Scala的占位符语法简写:

def singletonSet(elem: Int): FunSet = _ == elem

实现验证

当你执行val s = singletonSet(5)时,得到的s就是单元素集合的特征函数:

  • 调用contains(s,5)返回true
  • 调用contains(s,3)、contains(s,-2)等都返回false,完全符合单元素集合的预期。

内容的提问来源于stack exchange,提问作者Jonas_Astley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:30:01