小编Nic*_*tti的帖子

Dict与榆树记录

在实现一个简单的应用程序时,我遇到了尝试更新嵌套记录的问题.我在网上找到了一个解决方案,但它看起来真的像是一大堆臃肿的代码.

当我在寻找替代品时,我发现了字典.这似乎是解决这个问题的方法 - 如果我在记录中使用字典,我可以避免所有膨胀的代码并获得嵌套更新.

看到彼此相邻的字典和记录让我想知道,为什么我会使用记录而不是字典,反之亦然?这两个看起来和我很相似,所以我不确定我是否看到了其中一个的优点.当然,我可以看到语法有所不同,但这就是全部吗?

我在某处了解到Dict的访问时间复杂度是O(log(n)) - 它是否对密钥进行二进制搜索? - 但我无法找到记录的访问时间复杂度,但我想知道这是否是O(1),这是其中一个优点.

无论哪种方式,它们似乎都映射到其他语言中的1个单一数据结构(例如Python的字典,JS对象,Java哈希表),为什么我们需要两个榆树?

elm

7
推荐指数
1
解决办法
396
查看次数

有向图节点邻居

在有向图中,节点邻居的定义是什么?

更具体地说,在下图中,哪些节点被认为是节点0的邻居?

在此输入图像描述

破解编码采访似乎表明,这两个1和2是0邻居,但它并没有明确说明这一点,我不能在网上找到一个妥善的定义.

编辑:

我的困惑来自这个特定的段落:

在邻接矩阵表示中,您将需要遍历所有节点以识别节点的邻居.

这似乎意味着2被认为是0的邻居,否则你只需要通过0的行来找到它的邻居.但它从未明确说过这一点.

algorithm graph data-structures

6
推荐指数
1
解决办法
1998
查看次数

Jest动态调整覆盖阈值

我已将笑话添加到我的团队前端开发流程中。现在覆盖率确实很低,大约为 1.2%,目标是确保我们不断增长——例如,每次提交代码覆盖率至少不会降低。

我能够设置笑话来检查代码覆盖率

collectCoverage: true,
    collectCoverageFrom: [
        "<rootDir>/src/**/*.{ts,tsx}",
    ],
    coverageThreshold: {
        global: {
            "statements": 1.26,
            "branches": 1.32,
            "functions": 1.1,
            "lines": 1.25,
        },
    },
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,这些值是静态的,当我们提高覆盖范围时,我必须手动更新它们。

有没有一种方法可以告诉 jest 检查新的代码覆盖率是否比推送更改之前的代码覆盖率更好?

javascript frontend jestjs ts-jest

5
推荐指数
0
解决办法
324
查看次数

在elm中键入继承

我想要实现的是类型继承.我的意思是我希望能够让函数返回"子类型",然后返回一个返回"超类型"的函数.让我给你举个例子

假设我有一个主视图组件,它返回一个Html消息

view:  Model -> Html Msg
view model = 
    div [class "goal-box"] [
      function_a model,
      function_b model
    ]
Run Code Online (Sandbox Code Playgroud)

现在我想function_afunction_b每个人都能够返回一个子类型Msg

function_a: Model -> Html AMsg

function_b: Model -> Html BMsg

我想要这个的原因是因为我想确保function_a受限于它可以产生什么样的Msg,同样适用于function_b,但最终我需要一个使用两者的统一视图.

所以很自然的是将Msg定义为

type Msg 
  = AMsg
  | BMsg

type AMsg
  = AnotherMsg Int
  | AgainMsg Int

type BMsg
  = ThisMsg String
  | ThatMsg Int
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,因为编译器告诉我它期望返回值类型Html Msg而不是Html AMsg.

我希望这很清楚.我觉得类型是我正在努力争取最多来自JS的概念,但希望我朝着正确的方向前进.

免责声明

我在当天早些时候问了一个类似的问题,但我意识到我犯了一个错误,然后在我编辑它时混淆了几次.所以我不得不删除它.向花时间阅读和回答的人们道歉.

types elm

4
推荐指数
1
解决办法
132
查看次数

服务器不允许请求未通告的对象

我知道以前有人问过这个问题,但我找到了所有答案,只是给我一个快速解决问题的方法,或者对它为什么会发生以及它是如何实际解决的一个令人困惑的解释。

这就是我遇到此错误的方式。我的一个队友在我们的 repo 中推动了对子模块的更改。从 master 拉取后git status,我们的子模块中显示了新的提交:

modified: path/to/submodule/submodule_name (new commits)

所以我决定通过运行来更新子模块

git submodule update path/to/submodule/submodule_name--这里是这个命令的文档

在这一点上我得到了错误

Fetched in submodule path 'path/to/submodule/submodule_name', but it did not contain ... Direct fetching of that commit failed
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后,我发现了我的问题的不同答案:

  1. github
  2. 超级用户
  3. 堆栈溢出

超级用户是让我更接近理解问题的链接,而 github 只是给了我运行命令来修复它—— git submodule sync

现在,git status当我尝试更新服务器时,我仍然对更改如何显示在我的但不知道提交中感到有些困惑。怎么git submodule sync做才能使该提交可用?

git github git-submodules

4
推荐指数
1
解决办法
4753
查看次数

在评估数组属性时,怎么没有抛出错误?

每当我尝试访问不存在的数组的属性时,php会抛出一个如下所示的ERROR_NOTICE:

Notice: Undefined offset: BLANK in BLANK on line BLANK

$a = array("a","b","c");

$a[4]; //throws an error
Run Code Online (Sandbox Code Playgroud)

相反,如果我isset用来测试此属性的存在,则不会抛出此错误.

$a = array("a","b","c");

isset($a[4]); //does not throw an error
Run Code Online (Sandbox Code Playgroud)

由于php在将参数传递给函数之前会对其进行求值,因此如何避免抛出错误?

php isset

3
推荐指数
1
解决办法
86
查看次数

索引处的增量元素

我正在关于随机示例guide.elm-lang网站上工作.我正在尝试添加一个功能,向您显示掷骰子的总次数,以及您获得每张脸的次数的一些统计数据.

为此,我将模型更改为如下所示:

type alias Model =
  { 
    die_face : Int,
    total_throws : Int,
    stats: Array.Array Int
  }
Run Code Online (Sandbox Code Playgroud)

这就是我更新模型的方法:

{ model | 
     die_face = face, 
     total_throws = model.total_throws + 1, 
     stats = Array.set face ((Array.get face model.stats) + 1) model.stats
}
Run Code Online (Sandbox Code Playgroud)

这会抛出一个错误告诉我:

get调用产生:

#Maybe# Int
Run Code Online (Sandbox Code Playgroud)

但是(+)仅适用于#Int#和#Float#值.

这指的是Array.get不返回a Int但是Maybe因此我无法将其添加到数字1.

我已经尝试使用列表来实现相同的目的,但由于它们没有编入索引,我不确定当我映射它时会增加什么.我正在考虑使用记录来做到这一点,并想出一种方法将记录键映射到faceInt.

一般来说,我的问题是.在elm中以数组的索引[x]递增元素的好方法是什么?或者,如果我只是想到这个错误,榆树的方式是什么?

arrays maybe elm

3
推荐指数
1
解决办法
59
查看次数

复合类型和 Html onInput

一周前,我终于找到了一种将我的消息分成不同类别的方法(这是我得到答案的 SO 问题

现在我已经实施了这个解决方案:

type Msg 
    = AMsg AMsg
    | BMsg BMsg
    | CMsg CMsg
Run Code Online (Sandbox Code Playgroud)

然后我将 AMsg 定义如下

type AMsg
    = ActionOne Int String
    | ActionTwo Int
Run Code Online (Sandbox Code Playgroud)

一切都很好,除非我将 ActionOne 与 onInput Html.Event

input [onInput (AMsg (ActionOne model.id))] []
Run Code Online (Sandbox Code Playgroud)

这个错误告诉我 onInput 需要一个 String -> Msg 类型,但正在获取一个 AMsg 类型。

如果我使用onClick例如并自己传入第二个参数,这将工作得很好

input [onClick (AMsg (ActionOne model.id "hello"))] []
Run Code Online (Sandbox Code Playgroud)

但是因为我需要使用 onInput 并且这就是将第二个 String 参数传递给 ActionOne 的原因,所以我被卡住了。如果我改变我的类型来适应这个

type Msg 
    = AMsg AMsg String
    | BMsg BMsg
    | CMsg CMsg

type AMsg …
Run Code Online (Sandbox Code Playgroud)

elm

3
推荐指数
1
解决办法
70
查看次数

猫鼬字段不是必需的但唯一

我有一个设置为唯一的电子邮件字段,但这不是必需的。

问题是,如果用户不输入任何内容,猫鼬会在其中输入“ null”。这将导致重复,因为每个未输入电子邮件字段的用户都将被分配“空”。

避免这种情况的标准做法是什么?

谢谢

javascript mongoose node.js

2
推荐指数
1
解决办法
1723
查看次数