gpt4 book ai didi

design-patterns - 覆盖现有记录的值但保留未覆盖的值的模式是什么?

转载 作者:行者123 更新时间:2023-12-03 16:44:48 25 4
gpt4 key购买 nike

我在六个地方看到过这个:

  • pom.xml的Maven 2配置对比你的项目 pom.xml本地项目 pom 覆盖全局配置一的值。
  • vim配置文件:在vim中安装目录,并在您的用户配置文件中。
  • Ruby on Rails(合理的默认值)
  • Simphony 2(又名 MICROS 9700 的曾孙)来自企业(云)的所有记录都被覆盖。
  • 在某种程度上,在父目录和子目录之间的 NTFS ACL 中,当子目录不是继承其权限时,在本地设置了它。
  • 在任何 OOP 语言中就函数扩展类。
  • 最佳答案

    我想您可以通过多种方式查看此内容。如 jaco0646 suggests 、继承,或者更一般地说,子类型可能是看待它的一种方式。
    你也可以把它想象成一个掩码,就像一个位掩码:

        10010101   10100101
    OR 11110000 11110000
    = 11110101 11110101
    您可以将其视为对二元数组的二元运算,如 x || y ,其中最左边的值 x是默认值, y包含您的覆盖。
    如果您概括这个想法,您可以将其视为对可以在多个级别上部分覆盖的一类数据(例如配置数据)的二元运算。类似 x <> y <> z ,其中 x是最通用的数据集(默认值),越靠右,覆盖越具体。
    如果你制定了这个操作是关联的(明智的)规则,你有一个 semigroup .一个半群称为最后一个,它总是选择最后一个(即最右边)的值。这让您走到了一半,但您只想选择最后一个值(如果它在那里)。然后,您可以将它与“可选性”结合起来,称为 JustNothing (又名 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})
    如果默认值是“中性”值,则您会得到 monoid .两个半群和 monoids compose .
    如果您考虑诸如可覆盖的配置值之类的东西,配置集通常是一组不同的值。例如,让我们考虑以毫秒为单位的超时值(整数)和默认名称(字符串)。
    因此,您可以将此配置视为一个元组。 (您可以为每个值创建一个带有字段名称的显式类型,但这与元组是同构的。)
    下面是一个默认值的例子:
    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"}))
    所以,本质上,这个“模式”只是一个半群的组合,最后一个半群作为内半群,中间可能/选项,并用一个合适的元组作为最外半群。

    关于design-patterns - 覆盖现有记录的值但保留未覆盖的值的模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64826588/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com