【发布时间】:2019-06-03 02:46:48
【问题描述】:
似乎有两种方法可以将函数作为不进行动态调度的参数传递:
&impl Fn(TIn) -> TOut // By referenceimpl Fn(TIn) -> TOut // By value
假设函数是纯函数(即可以多次调用),我最初的想法是最好的方法是通过引用传递。这意味着一个函数对象可以被多次使用(因为所有权不会被转移),在更常见的情况下,它只是一个匿名闭包,引用间接应该被优化掉,因为编译器确切地知道函数本身(所以它可以被内联)。
但是,例如,我注意到 Option::map 通过值传递了它的闭包,这让我觉得也许我做错了什么。
我应该通过值还是通过引用传递函数对象?如果这两种方法都没有明确的答案,我应该考虑哪些因素?
【问题讨论】:
标签: rust