我正在尝试创建一个行为混合的不可变集合类型 multiset / bag和Map,记录每个项目的出现次数。
我可以用类似下面的代码编写一个可变的代码,我尝试通过继承Map来编写一个不可变的代码,但Map是密封的,不会让我定义任何覆盖。
type TallySet<'k_t when 'k_t : comparison>() = class
// inherit Map<'k_t, int>
let m_map:((Map<'k_t, int>) ref) = ref (Map.empty)
member x.add item =
m_map :=
match (!m_map).TryFind item with
| None -> (!m_map).Add(item, 1)
| Some n -> (!m_map).Add(item, 1 + n)
!m_map
member x.Count with get() = Map.fold (fun cc k v -> cc + v) 0 !m_map
end
我应该写什么?
答案 0 :(得分:2)