重写现有记录的值但保留未重写的值的模式称为什么?

u2nhd7ah  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(270)

我在六个地方见过这个:
maven 2的配置 pom.xml 与您的项目 pom.xml 本地项目pom覆盖全局配置pom的值。 vim 配置文件:在 vim 安装目录,并在您的用户配置文件中。
RubyonRails(合理的默认值)
simphony2(又称micros9700的曾孙)所有来自企业(云)的记录都被覆盖。
在某种程度上,在父目录和子目录之间的ntfs ACL中,子目录不是继承它的权限,而是在本地设置了它。
在任何面向对象语言中扩展一个类的函数。

e5nqia27

e5nqia271#

提供合理默认值的软件抽象(尤其是框架)通常被称为固执己见。这与每个变量都需要客户机实现的抽象不同。后者最初被认为提供了更多的自由;但事实证明,自由是一项艰巨的工作,大多数客户最终都会做出同样的选择。固执己见的抽象提供了不去选择的自由。
你也可以简单地称之为继承。

6kkfgxo0

6kkfgxo02#

我想你可以用不止一种方式来看待这个问题。正如jaco0646所暗示的,继承,或者更一般地说,子类型可能是看待它的一种方式。
您也可以将其视为一个掩码,如位掩码:

10010101   10100101
 OR 11110000   11110000
  = 11110101   11110101

您可以将其视为二进制数组上的二进制操作,如 x || y ,其中最左边的值 x 是默认值,并且 y 包含覆盖。
如果你概括这个想法,你可以认为它是一个二进制操作的一种类型的数据(例如配置数据),可以部分覆盖在多个级别。像这样的 x <> y <> z ,在哪里 x 是最通用的数据集(默认值),越往右,覆盖越具体。
如果你建立了这个操作是关联的(合理的)规则,你就有了一个半群。一个半群称为last,它总是选择最后一个(即最右边的)值。这让你走到了一半,但你只想选择最后一个值,如果它在那里。你可以把它和“可选性”结合起来,如下所示 Just 以及 Nothing (又名 Maybe ). 以下是haskell中的一些简单示例:

Prelude Data.Semigroup> Just (Last 42) <> Just (Last 1337)
Just (Last {getLast = 1337})
Prelude Data.Semigroup> Just (Last 42) <> Nothing
Just (Last {getLast = 42})
Prelude Data.Semigroup> Just (Last 42) <> Nothing <> Just (Last 2112)
Just (Last {getLast = 2112})

如果默认值是“neutral”值,则改为使用monoid。半群和幺半群共同构成。
如果考虑可重写配置值之类的内容,配置集通常是一组不同的值。例如,让我们考虑一个以毫秒为单位的超时值(整数)和一个默认名称(字符串)。
因此,可以将此配置视为元组(您可以创建一个显式类型,其中每个值都有字段名,但这将与元组同构。)
下面是一个默认值的示例:

Prelude Data.Semigroup> (Just (Last 1000), Just (Last "Foo"))
(Just (Last {getLast = 1000}),Just (Last {getLast = "Foo"}))

如果只想覆盖名称,可以执行以下操作:

Prelude Data.Semigroup> (Just (Last 1000), Just (Last "Foo")) <> (Nothing, Just (Last "Bar"))
(Just (Last {getLast = 1000}),Just (Last {getLast = "Bar"}))

后面的步骤也可以覆盖超时:

Prelude Data.Semigroup> (Just (Last 1000), Just (Last "Foo")) <> (Nothing, Just (Last "Bar"))
                            <> (Just (Last 2000), Nothing)
(Just (Last {getLast = 2000}),Just (Last {getLast = "Bar"}))

所以,在本质上,这个“模式”只是一个半群的组合,最后一个半群是内部半群,中间可能是/选项,由一个适当的元组组成,最外面的半群。

相关问题