Tag: 列出了

什么是不可变集合上的一个非变异的“添加”方法的最好的名字?

不好意思的是,如果我能拿出一个简洁的标题,我不会问这个问题。 假设我有一个不可变的列表types。 它有一个操作Foo(x) ,它返回一个带有指定参数的新的不可变列表作为最后一个额外的元素。 所以要build立一个值为“你好”,“不可变”,“世界”的string列表,你可以这样写: var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (这是C#代码,如果你觉得这个语言很重要,我最感兴趣的是C#的build议,这不是一个基本的语言问题,但是这个语言的习惯用法可能很重要。 重要的是现有的列表不会被Foo修改,所以empty.Count仍然会返回0。 另一种(更习惯的)达到最终结果的方式是: var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); 我的问题是: Foo最好的名字是什么? 编辑3 :正如我后来透露,types的名称可能实际上不是ImmutableList<T> ,这使得位置清晰。 想象一下,它是TestSuite ,它是不可变的,因为它是整个框架的一部分是不可变的… (编辑结束3) 我到目前为止的选项: Add :在.NET中通用,但意味着原始列表的变化 Cons :我认为这是function语言中的普通名字,但对那些没有这种语言经验的人来说毫无意义 Plus :迄今为止我的最爱,这并不意味着我的变化 。 显然这也是在Haskell中使用的,但是期望稍有不同(Haskell程序员可能期望它将两个列表一起添加,而不是向另一个列表添加单个值)。 With :一致的一些其他不变的约定,但不具有相同的“增加”它IMO。 And :不是很具描述性。 运营商超负荷+:我真的不喜欢这么多; 我一般认为运营商只适用于较低层次的types。 […]