gpt4 book ai didi

javascript - Om.next : apply vs directly passing children

转载 作者:行者123 更新时间:2023-11-30 12:05:09 24 4
gpt4 key购买 nike

Om.next wiki ,有这样的示例代码(链接页面底部的代码 list ):

(apply dom/ul nil
(map person list))

由于 dom/ul 接受可变数量的参数,使用 apply 与此相比有什么好处:

(dom/ul nil (map person list))

第二种方法似乎更类似于在受支持的 vanilla React 中将数组作为 children 传递。

真题(回复评论):apply有必要吗?如果是这样,为什么后一种方法不起作用?如果不是,像示例中那样使用 apply 有什么好处?

最佳答案

dom/ul 的 ClojureScript 签名显然类似于 (defn ul [attrs & children] ...)。这里 children 是一个可变参数。调用者可以传入 0 个或多个 child 。因此,以下调用是有效的:

(dom/ul nil (person jack))
(dom/ul nil (person jack) (person jill))
(dom/ul nil)

现在假设您有一组要包装在 ul 中的元素。该集合可能来自 (map person list),它返回一个元素序列。如果 ul 像 (dom/ul nil (map person list)) 那样被调用,只有一个子参数被传递给 ul,而且它的类型是错误的。每个 child 都应该是一个元素,但传入的是元素集合。

应用 进行救援。 apply 的工作是处理我们有一组参数的情况,这些参数必须单独传入。所以,(dom/ul nil (person jack) (person jill)) 等同于 (apply dom/ul nil (map person [jack jill]))apply 在这种情况下是必要的,以确保将参数传递给 ul,因为该函数需要它们。跳过 apply 不是一个选项。

关于javascript - Om.next : apply vs directly passing children,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35441082/

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