我在六个地方见过这个:
maven 2的配置 pom.xml
与您的项目 pom.xml
本地项目pom覆盖全局配置pom的值。 vim
配置文件:在 vim
安装目录,并在您的用户配置文件中。
RubyonRails(合理的默认值)
simphony2(又称micros9700的曾孙)所有来自企业(云)的记录都被覆盖。
在某种程度上,在父目录和子目录之间的ntfs ACL中,子目录不是继承它的权限,而是在本地设置了它。
在任何面向对象语言中扩展一个类的函数。
我在六个地方见过这个:
maven 2的配置 pom.xml
与您的项目 pom.xml
本地项目pom覆盖全局配置pom的值。 vim
配置文件:在 vim
安装目录,并在您的用户配置文件中。
RubyonRails(合理的默认值)
simphony2(又称micros9700的曾孙)所有来自企业(云)的记录都被覆盖。
在某种程度上,在父目录和子目录之间的ntfs ACL中,子目录不是继承它的权限,而是在本地设置了它。
在任何面向对象语言中扩展一个类的函数。
2条答案
按热度按时间e5nqia271#
提供合理默认值的软件抽象(尤其是框架)通常被称为固执己见。这与每个变量都需要客户机实现的抽象不同。后者最初被认为提供了更多的自由;但事实证明,自由是一项艰巨的工作,大多数客户最终都会做出同样的选择。固执己见的抽象提供了不去选择的自由。
你也可以简单地称之为继承。
6kkfgxo02#
我想你可以用不止一种方式来看待这个问题。正如jaco0646所暗示的,继承,或者更一般地说,子类型可能是看待它的一种方式。
您也可以将其视为一个掩码,如位掩码:
您可以将其视为二进制数组上的二进制操作,如
x || y
,其中最左边的值x
是默认值,并且y
包含覆盖。如果你概括这个想法,你可以认为它是一个二进制操作的一种类型的数据(例如配置数据),可以部分覆盖在多个级别。像这样的
x <> y <> z
,在哪里x
是最通用的数据集(默认值),越往右,覆盖越具体。如果你建立了这个操作是关联的(合理的)规则,你就有了一个半群。一个半群称为last,它总是选择最后一个(即最右边的)值。这让你走到了一半,但你只想选择最后一个值,如果它在那里。你可以把它和“可选性”结合起来,如下所示
Just
以及Nothing
(又名Maybe
). 以下是haskell中的一些简单示例:如果默认值是“neutral”值,则改为使用monoid。半群和幺半群共同构成。
如果考虑可重写配置值之类的内容,配置集通常是一组不同的值。例如,让我们考虑一个以毫秒为单位的超时值(整数)和一个默认名称(字符串)。
因此,可以将此配置视为元组(您可以创建一个显式类型,其中每个值都有字段名,但这将与元组同构。)
下面是一个默认值的示例:
如果只想覆盖名称,可以执行以下操作:
后面的步骤也可以覆盖超时:
所以,在本质上,这个“模式”只是一个半群的组合,最后一个半群是内部半群,中间可能是/选项,由一个适当的元组组成,最外面的半群。