我正在努力更深入地了解lens库,因此我会使用它提供的类型.我已经有了一些镜片经验,并且知道它们有多么强大和方便.所以我转向棱镜,我有点迷失了.似乎棱镜允许两件事:
第一点看起来很有用,但通常一个不需要来自实体的所有数据,并且^?使用普通镜头可以获得所讨论Nothing的字段不属于实体所代表的分支,就像使用棱镜一样.
第二点......我不知道,可能有用吗?
所以问题是:我可以用棱镜做些什么我不能用其他光学器件?
编辑:谢谢大家的优秀答案和进一步阅读的链接!我希望我能接受他们.
在该手册页longjmp和setjmp,有这样一行:
如果调用
setjmp()之前longjmp()调用的函数被调用,则行为未定义.
这是否意味着我实际上必须在调用longjmp的函数setjmp或嵌套函数中的某个地方调用?或者根本不打电话可以吗?
D的语言参考说明了这一点
@property函数只能有零个,一个或两个参数.
很清楚零和一个参数的属性是什么,并且在引用中有一个示例.但是,除了允许它们之外,该引用没有提及任何关于双参数属性的内容.那么,他们究竟做了什么?这种属性的参数是什么意思?
在以下代码中:
fn main() {
let mut i: Option<i32> = None;
let mut cond = true;
while true && i.map_or(true, |x| x < 10) {
if cond {
cond = false;
i = Some(0);
continue;
}
i = Some(5);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到警告:
warning: value assigned to `i` is never read
--> src/lib.rs:8:13
|
8 | i = Some(0);
| ^
|
= note: #[warn(unused_assignments)] on by default
Run Code Online (Sandbox Code Playgroud)
这是非常小的(所以请暂时忽略它将永远循环),但显示问题:编译器似乎认为i从内部if被外部赋值覆盖,这显然不是由于continue.
我错过了什么,我是否在程序中引入了一些描述错误,还是编译器的错误?
出于好奇心,我输入了以下代码:
pure struct Foo{ }
pure class Bar{ }
Run Code Online (Sandbox Code Playgroud)
显然,这与DMD和LDC都有关.我不知道它做了什么(如果它),因为从这样的结构/类调用不纯的函数是可以的.那么,附加pure到类或结构的变化是什么?
我有一个multiparam类型类,它提供了一个有意义的函数交换参数:
class Swappable a b where
swappable :: a -> b -> Bool
Run Code Online (Sandbox Code Playgroud)
所以,如果a和b形式Swappable a b,然后b和a应该形成Swappable b a.为每个普通实例编写一个交换实例将是一件苦差事,所以我天真地写道
instance Swappable a b => Swappable b a where
swappable b a = swappable a b
Run Code Online (Sandbox Code Playgroud)
哪个不能编译,出现以下错误:
• Illegal instance declaration for ‘Swappable b a’
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears …Run Code Online (Sandbox Code Playgroud)