小编Mic*_*ail的帖子

什么是棱镜?

我正在努力更深入地了解lens库,因此我会使用它提供的类型.我已经有了一些镜片经验,并且知道它们有多么强大和方便.所以我转向棱镜,我有点迷失了.似乎棱镜允许两件事:

  1. 确定实体是否属于和类型的特定分支,如果属于,则捕获元组或单元中的基础数据.
  2. 解构和重构实体,可能在过程中对其进行修改.

第一点看起来很有用,但通常一个不需要来自实体的所有数据,并且^?使用普通镜头可以获得所讨论Nothing的字段不属于实体所代表的分支,就像使用棱镜一样.

第二点......我不知道,可能有用吗?

所以问题是:我可以用棱镜做些什么我不能用其他光学器件?

编辑:谢谢大家的优秀答案和进一步阅读的链接!我希望我能接受他们.

haskell haskell-lens

35
推荐指数
3
解决办法
1556
查看次数

在'setjmp'之后我是否必须调用'longjmp'

在该手册页longjmpsetjmp,有这样一行:

如果调用setjmp()之前longjmp()调用的函数被调用,则行为未定义.

这是否意味着我实际上必须在调用longjmp的函数setjmp或嵌套函数中的某个地方调用?或者根本不打电话可以吗?

c setjmp

8
推荐指数
1
解决办法
219
查看次数

D - 具有两个参数的属性

D的语言参考说明了这一点

@property函数只能有零个,一个或两个参数.

很清楚零和一个参数的属性是什么,并且在引用中有一个示例.但是,除了允许它们之外,该引用没有提及任何关于双参数属性的内容.那么,他们究竟做了什么?这种属性的参数是什么意思?

d

4
推荐指数
1
解决办法
72
查看次数

为什么在continue语句之前的循环中的变量赋值计为从不读取?

在以下代码中:

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.

我错过了什么,我是否在程序中引入了一些描述错误,还是编译器的错误?

compiler-warnings rust

4
推荐指数
1
解决办法
130
查看次数

D - 纯粹的类和结构

出于好奇心,我输入了以下代码:

pure struct Foo{ }
pure class Bar{ }
Run Code Online (Sandbox Code Playgroud)

显然,这与DMD和LDC都有关.我不知道它做了什么(如果它),因为从这样的结构/类调用不纯的函数是可以的.那么,附加pure到类或结构的变化是什么?

d

3
推荐指数
1
解决办法
153
查看次数

Haskell - 带有两个参数的类型类的翻转参数

我有一个multiparam类型类,它提供了一个有意义的函数交换参数:

class Swappable a b where
    swappable :: a -> b -> Bool
Run Code Online (Sandbox Code Playgroud)

所以,如果ab形式Swappable a b,然后ba应该形成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)

haskell typeclass

3
推荐指数
1
解决办法
143
查看次数

标签 统计

d ×2

haskell ×2

c ×1

compiler-warnings ×1

haskell-lens ×1

rust ×1

setjmp ×1

typeclass ×1