Rust中的本地函数

アレッ*_*ックス 27 rust

在Rust中有任何方法可以创建一个可以多次调用的本地函数.我在Python中这样做的方式是:

def method1():
  def inner_method1():
    print("Hello")

  inner_method1()
  inner_method1()
Run Code Online (Sandbox Code Playgroud)

Fra*_*gné 41

是的,您可以在函数内定义函数:

fn method1() {
    fn inner_method1() {
        println!("Hello");
    }

    inner_method1();
    inner_method1();
}
Run Code Online (Sandbox Code Playgroud)

但是,内部函数无权访问外部作用域.它们只是从函数外部无法访问的普通函数.但是,您可以将变量作为参数传递给函数.要定义具有仍可从外部作用域访问变量的特定签名的函数,必须使用闭包.


小智 5

这是一个老问题,但我是从 Jon Gjengset 的优秀Rust for Rustaceans中得出的,其中指出了内部函数 Rust 的一个有趣的用例。也就是说,如果您有一个通用函数,但具有非通用子组件,则可以编写一个内部函数来减少单态化产生的机器代码重复量。他给出了 的示例HashMap::insert,它当然必须计算某些泛型类型的哈希值K,但在某些实现下,遍历映射以查找插入点可能是非泛型的。

快乐编码!