小编Tor*_*iel的帖子

为什么这段代码不是恒定空间?

我目前正在学习Haskell(通过交易成为程序员,但这是我第一次尝试使用函数式语言).

我想编写一个扫描列表的函数,并返回该列表的最小和最大元素.排序Prelude的功能minimummaximum做法,但两者同时进行.我想出了以下代码:

import Data.List

-- Declaration of rand

minMax :: [Int] -> Maybe (Int, Int)
minMax []   = Nothing
minMax (x:xs) = Just (foldl' f (x, x) xs)
                where
                  f (a, b) c = (if c < a then c else a, if c > b then c else b)
Run Code Online (Sandbox Code Playgroud)

rand是一个生成无限数字列表的函数.问题是,当我追加以下main功能时:

main = print $ minMax $ take 1000000 $ rand 7666532
Run Code Online (Sandbox Code Playgroud)

使用profiling编译并运行所有这些,它显示它使用超过200 MB的内存,所以它绝对不是一个恒定空间函数(我希望它是).

问题是为什么以及我应该改变什么来解决它.据我所知foldl',从左侧折叠列表(它生成的方式相同)并且不是懒惰的,所以我不明白为什么内存使用率如此之高.我很确定这minMax是不正确的功能,只需打印上述列表即可

main = print $ …
Run Code Online (Sandbox Code Playgroud)

performance haskell

33
推荐指数
2
解决办法
1227
查看次数

如何通过 mat-dialog-close 或其他方式对 MatDialog 关闭进行单元测试

我有一个简单的组件,它将通过MatDialog显示为对话框窗口。在该组件的模板中,一个按钮被标记为mat-dialog-close属性,它应该关闭对话框窗口。

单击按钮时,如何对对话框进行单元测试?此外, mat-dialog-close 可以接受一个参数并将其传递给打开对话框的任何人。如何验证是否传递了正确的值?

这不是关于测试MatDialog机器,而是关于正确地将其连接到组件上。从测试的 POV 来看,如果对话框是通过按钮关闭的,mat-dialog-close或者通过仔细设置调用this.dialogRef.close(). 在后一种情况下,我可以dialogRef在调用时模拟注入和监视close,但使用mat-dialog-close要方便得多,所以我想坚持这一点。

通常我会使用TestBed.createComponent来创建组件,也许这必须以某种方式进行更改。

unit-testing angular-material

9
推荐指数
1
解决办法
7308
查看次数

如何安装多个版本的yarn

我正在参与几个项目。不幸的是他们使用多个版本的纱线。因此,我希望安装多个版本以及一种简单(甚至自动化)的切换方式。

我曾经对 抱有希望nvm alias,认为也许我会得到节点的第二个副本,其中包含不同的全局包。然后我可以有例如nvm use v10.0-yarn1.3.4或类似的东西,但nvm alias只创建一个不同的名称,全局包目录保持不变。

yarnpkg

5
推荐指数
1
解决办法
1752
查看次数