在Rust中有什么方法可以创建一个可以被多次调用的local函数,在Python中我会这样做:
def method1(): def inner_method1(): print("Hello") inner_method1() inner_method1()
ohfgkhjo1#
可以,您可以在函数中定义函数:
fn method1() { fn inner_method1() { println!("Hello"); } inner_method1(); inner_method1(); }
然而,内部函数不能访问外部作用域。它们只是普通函数,不能从函数外部访问。然而,你可以将变量作为参数传递给函数。要定义一个具有特定签名的函数,该函数仍然可以从外部作用域访问变量,你必须使用闭包。
fhg3lkii2#
这是一个老问题,但我从Jon Gjengset的优秀著作 * Rust for Rustaceans * 中找到了这个问题,其中提到了内部函数Rust的一个有趣的用例。也就是说,如果你有一个泛型函数,但它有非泛型的子组件,你可以编写一个内部函数来减少由单态化产生的机器码重复量。他给出了HashMap::insert的例子。其当然必须计算某个泛型类型K的散列,但是在某些实现下,遍历Map以找到插入点可能是非泛型的。快乐编码!
HashMap::insert
K
2条答案
按热度按时间ohfgkhjo1#
可以,您可以在函数中定义函数:
然而,内部函数不能访问外部作用域。它们只是普通函数,不能从函数外部访问。然而,你可以将变量作为参数传递给函数。要定义一个具有特定签名的函数,该函数仍然可以从外部作用域访问变量,你必须使用闭包。
fhg3lkii2#
这是一个老问题,但我从Jon Gjengset的优秀著作 * Rust for Rustaceans * 中找到了这个问题,其中提到了内部函数Rust的一个有趣的用例。也就是说,如果你有一个泛型函数,但它有非泛型的子组件,你可以编写一个内部函数来减少由单态化产生的机器码重复量。他给出了
HashMap::insert
的例子。其当然必须计算某个泛型类型K
的散列,但是在某些实现下,遍历Map以找到插入点可能是非泛型的。快乐编码!