- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于Rust的reading时,我遇到了一个示例函数,该函数接受一个数字并返回一个将该数字添加到另一个数字的函数。
fn higher_order_fn_return<'a>(step_value: &'a i32) -> Box<Fn(i32) -> i32 + 'a> {
Box::new(move |x: i32| x + step_value)
}
step_value
作为引用传递? Fn(i32) -> i32 + 'a
)? 'a
编写为泛型(<'a>
),但在返回类型(+ 'a
)中“添加”呢? move
的含义是什么,在这里被移动了什么? 最佳答案
禁止提出一个以上的问题,但是由于所有这些都属于“这段代码的含义”,因此我不会提示。同样,它确实将相当多的怪异现象压缩成一个相对较小的,不是非常不寻常的片段。
Why is
step_value
passed in as a reference?
Why is the function being returned boxed?
fn
定义。它正在返回一个关闭。这里的问题是,由于性能原因,每个闭包实际上都是匿名类型(有时称为“Voldemort类型”)的实例。匿名类型是一个问题,因为您无法命名它们,但必须命名返回类型。
Fn
。还有
FnMut
和
FnOnce
。它返回装箱,因为裸特征对象无法按值传递,因此特征对象始终必须位于某种指针之后(例如
Box
,
&
,
Rc
等)。
How to interpret the unconventional way to write a function type (as
Fn(i32) -> i32 + 'a
) ?
+ 'a
,因为实际上这是另外一回事。
Fn(i32) -> i32
是重要的部分。 Rust中的每个“可调用”事物都实现
Fn
,
FnMut
和
FnOnce
特性中的一个或多个,这就是Rust表示能够调用某些东西的想法。括号内的内容是参数,
->
之后的内容是返回类型,就像函数一样。
Why is
'a
written as a generic (<'a>
) but "added" in the return type (+ 'a
) ?
<...>
内的东西)。
Box
内的特征对象将对有效期多长时间。如果您有
Box<SomeTrait>
,则允许编译器让该值存在多长时间?通常,该信息将是类型的一部分,但是如果您使用的是特征,则编译器将不知道所使用的是哪种类型。请记住,您可以在
Box<SomeTrait>
实现
Box<T>
的任何
T
中制作一个
SomeTrait
。
step_value
借用,这意味着它不能超过该借用的生存期(即
'a
)。但是,如果类型只是
Box<Fn(i32) -> i32>
,则编译器将没有该信息。因此,可以使用语法来指定,无论隐藏在trait对象后面的类型是什么,它都不能超过给定的生存期。
+ 'a
所说的:“这是一个实现
Fn(i32) -> i32
特性的带框值,它不能超过
'a
的生命周期”。
What is the meaning of the move and what is being moved here?
step_value
时,编译器通常只会借用它。
step_value
借用,而是可以将其移动到闭包中。
If you don't write the
+ 'a
inBox<Trait + 'a>
, what would normally happen?
&'a Trait
实际上是
&'a (Trait + 'a)
。
Box
没有自己的生命周期参数,因此它会获得
'static
(即
Box<Trait>
是
Box<Trait + 'static>
),这意味着默认情况下,装箱的特征对象不能包含任何非
'static
借位。
关于rust - 如何理解这个返回另一个函数的Rust函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45330614/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!