小编Har*_*aye的帖子

Lazy 评估和 Strict/Eager 评估之间的权衡是什么?

因此,这种惰性求值的概念被广泛使用,尤其是在阅读函数式编程、Java 流等内容时。

流是惰性的;仅在启动终端操作时才执行对源数据的计算,并且仅在需要时消耗源元素。

哈斯克尔很懒。这意味着除非另有明确说明,Haskell 不会执行函数并计算事物,直到它真正被迫向您显示结果为止。

现在我的理解是,如果我有一个数据列表,我希望对其执行 N 次操作,那么惰性求值只会对整个列表进行 1 次传递,而不是 N 次。为什么这如此理想?在我看来,对单个列表进行 N 次传递所导致的操作次数与对列表进行 1 次传递但对列表中包含的每个元素执行 N 次操作的操作次数相同。

我的问题是:

  1. 惰性评估总是好的吗?如果不好,我们接受它会做出什么权衡?
  2. 如何分析惰性算法的性能?
  3. 惰性求值的典型用例有哪些?
  4. 程序员对此有控制权吗?我可以用不支持立即进行惰性求值的语言来创建惰性函数吗?

有人可以以与语言无关的方式回答这个问题吗,因为我对这个概念而不是特定的语言更好奇。

evaluation haskell lazy-evaluation java-stream

7
推荐指数
3
解决办法
1651
查看次数

如何填充新创建的猫鼬文档?

我有一个情况,我正在检查文档是否已存在,如果不存在,我将创建一个新文档。我需要填充文档内的 2 个字段。我的问题是.create方法不支持.populate方法,因为如果我尝试这样做,我会收到错误。此外,. populate方法也不适用于返回的文档。如何正确填充新创建的文档?这是我的代码:

Favorite.create({ user: req.user._id, dishes: req.params.dishId })
                    .then((favorite) => {
                        favorite.populate('user');
                        favorite.populate('dishes');
                        console.log('Favorite marked', favorite);
                        res.statusCode = 200;
                        res.setHeader('Content-Type', 'application/json');
                        res.json(favorite);
                    }, (err) => next(err))
            }
        })
        .catch((err) => next(err));
Run Code Online (Sandbox Code Playgroud)

mongoose promise mongoose-populate mongoose-schema

6
推荐指数
2
解决办法
3265
查看次数

有没有办法列出使用 venv 模块创建的所有 python 虚拟环境?

Conda 允许我列出所有虚拟环境,如下所示。命令是:

conda info --envs OR conda env list  
Run Code Online (Sandbox Code Playgroud)

我想使用 pip 来做到这一点。pip 是否可以选择列出我创建的所有虚拟环境?我已经在桌面上创建了一个虚拟环境,但我无法找到将其与基本环境一起列出的方法。

python virtualenv python-venv conda

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

为什么 Kotlin 不在数据类构造函数中隐式分配 null 值可空字段?

给定一个具有可为空字段的数据类,为什么我不能通过仅传递不可为空字段来构造它?

我已经看过这个相关问题了。是什么阻止 Kotlin 隐式将 null 分配给可为 null 的字段?

data class Blah(val id: Int, val name: String?)

val x = Blah(id = 2) // Complains I didn't pass a name ???
Run Code Online (Sandbox Code Playgroud)

kotlin data-class

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

为什么可选链在我的 Node REPL 中不起作用?

我从MDN中逐字复制粘贴的示例代码,但可选链接在我的节点(v12.13.0)REPL 中不起作用。抛出语法错误,指出问号后面的点无效。这是怎么回事 ?我已经在 React 应用程序中使用了这个表达式,它似乎工作得很好。

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};


const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined

console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined

Run Code Online (Sandbox Code Playgroud)

javascript syntax node.js optional-chaining

0
推荐指数
1
解决办法
9785
查看次数