30
在不可变集合上使用不变异的“添加”方法的最佳名称是什么?
对不起,标题太小了-如果我能拿出一个简洁的标题,则不必提这个问题。 假设我有一个不变的列表类型。它具有一个操作Foo(x),该操作返回一个新的不可变列表,该列表以指定的参数作为结尾的额外元素。因此,要构建具有值“ Hello”,“ immutable”,“ world”的字符串列表,您可以编写: var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (这是C#代码,如果您觉得语言很重要,那么我对C#建议最感兴趣。从根本上讲,这不是语言问题,但语言的成语可能很重要。) 重要的是现有列表不会被更改Foo-因此empty.Count仍将返回0。 达到最终结果的另一种(更惯用的)方法是: var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); 我的问题是:Foo的最佳名字是什么? 编辑3:正如我稍后会透露的那样,类型的名称实际上可能不是ImmutableList<T>,这使位置很明确。而是想象TestSuite它是不可变的,因为它所包含的整个框架都是不可变的... (编辑结束3) 到目前为止,我已经提出的选项: Add:.NET中常见,但表示原始列表已更改 Cons:我相信这是功能语言中的正常名称,但对没有使用这些语言经验的人来说毫无意义 Plus:到目前为止,我最喜欢的这并不意味着对我有所改变。显然,这在Haskell中也使用过,但期望值稍有不同(Haskell程序员可能希望它将两个列表加在一起,而不是将一个值添加到另一个列表中)。 With:与其他一些不可变的约定一致,但与IMO的“附加性”并不完全相同。 And:不是很描述。 +的运算符重载:我真的不是很喜欢。我通常认为运算符应仅应用于较低级别的类型。我愿意被说服! 我要选择的标准是: 给出方法调用结果的正确印象(即它是带有额外元素的原始列表) 尽可能清楚地表明它不会对现有列表进行变异 如上面的第二个示例中所述,当链接在一起时听起来很合理 如果我不够清晰,请询问更多详细信息... 编辑1:这是我倾向于Plus的原因Add。考虑以下两行代码: list.Add(foo); list.Plus(foo); …