- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只知道一个有效,另一个无效。
上下文:
我有一个数据结构F
其中包含 Data.Map.Map k S
到另一个数据结构 S
.我的目标是建立一个 Lens
给出 F
和 k
将描述 S
中的一个字段.
困难在于关键k
可能不在 map 中。很好,该函数可以将其返回值包装在 Maybe 中。但是,我无法使用 at
通过 Maybe 传播镜头。 .在阅读了很多 Stack Overflow 的答案后,我遇到了 this one .
原来替换at
与 ix
如果我也替换了 (^.)
,则解决了我的类型问题与 (^?)
.
问题:
好像是 at
和 ix
做同样的事情,至少对于 Map
.两者都取一个键并为该键的值提供一个“镜头”。但是,ix
似乎与函数组合运算符 (.)
配合得很好.两者有什么区别?
离题咆哮:
我和其他人一样喜欢中缀运算符,但 Control.Lens 包似乎有点过火了。对于一个有一些英文名字和某个地方的键的新用户来说,学习曲线会降低。由于 Lens 库中使用了大量的包装类,如果您还不知道发生了什么,则特别难以挖掘类型签名。看在老天的份上,我的代码开始看起来像 Perl。
最佳答案
那at
和 ix
如果您查看包含这些函数的类的可用实例,那么它们的不同就已经很明显了:
At
的实例: Map, IntMap, HashMap Ixed
的实例: [a]、Map、ByteString、Text 等等At
也是
Ix
的一个实例,但不是
Ix
的所有实例也是
At
的一个实例.
At
用于允许插入容器中不存在的键的容器。这对于 map 显然是可能的,但不是例如列表。为了仍然能够对列表进行索引并更改其中的项目,
Ix
不允许创建新项目,但当您尝试写入不存在的 key 时只是“什么都不做”。
>>> Data.Map.fromList [('a', 1)] & at 'b' .~ Just 4
fromList [('a',1),('b',4)] -- Inserts value
>>> Data.Map.fromList [('a', 1)] & ix 'b' .~ 4
fromList [('a',1)] -- Does nothing because key is not present
a .~ Just b
、
a ?~ b
还有一个快捷方式)
ix
是
Traversal而
at
是
Lens .因为
at
是一个“返回”一个 Maybe Something 的镜头,你不能用一个只拍摄一个普通的“Something”的镜头来构图。
ix
是一个具有 0 或 1 值的遍历,因此您可以像任何其他遍历一样组合 ix(就像您可以编写
traverse . traverse
一样)。
(^?)
只取该遍历的第一个值(头)。
ix
来自
at
:
ixAt = at . traverse
(<.)
用于组合以保持索引从 at。 (
at
和
ix
都是索引镜头/遍历)。
关于haskell - Haskell的Lens库中 `ix`和 `at`有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414177/
有多个关于堆栈溢出的问题比较 loc、iloc 和 ix,例如 this one ,以及多个谈论速度差异的问题,例如 this one 。似乎一致认为 .ix 更快,但它是 deprecated .
显然不可能转换 WhereEnumerableIterator至 IEnumerable public interface IX public class X1 : IX public class X
为什么下面会导致编译错误? interface IX {} interface IY {} class XY : IX, IY {} void Foo() where T : IX, IY {
例如, import pandas as pd import numpy as np df1 = pd.DataFrame({'frames':np.arange(3), 'r':np.repeat(
在 C# 中,如果 A 实现 IX 并且 B 继承自 A ,是否必然遵循 B 实现 IX?如果是,是因为 LSP 吗?之间有什么区别吗: 1. Interface IX; Class A : IX;
考虑 Pandas 数据框 df = DataFrame({'somedata': [13,24,54]}, index=[1,1,2]) somedata 1 13 1 24 2
在pandas iloc vs ix vs loc explanation, how are they different? ,它提到:ix 通常会尝试表现得像 loc 但如果标签不在索引中,则回落到
一开始自学Python的numpy、pandas时候,索引和切片把我都给弄晕了,特别是numpy的切片索引、布尔索引和花式索引,简直就是大乱斗。但是最近由于版本的问题,从之前的Python2.7改用
抱歉,标题措辞不好,但我什至不知道如何正确提问。 我该如何转动它? instPublicIP :: Instance -> Maybe Text instPublicIP inst = inst
我想运行一段代码来检查其中发生了什么,但我无法执行它,有一条消息说 .ix 已弃用。 离群值 = 4 #离群值 for k in np.arange(0,3,1): wAvg = sum(df
Python 版本:2.7.6 NumPy 版本:1.10.2 Pandas :0.17.1 我知道 .ix 现在已被弃用,但我在遗留系统上工作并看到 .ix 的这种行为,我很困惑 # Native
因此,我尝试使用此处“删除不符合所需条件的行”下的方法,仅在我的数据框中包含 B 列值小于 C 列值的行:https://www.quora.com/How-should-I-delete-rows-
我有一个 pandas 数据框形式的 csv 文件,具有以下索引 Time stamp SOG Altitude 2015-03-11T08:49:53.00
我想知道是否有一种方法可以使 .ix 具有多个条件。更具体地说,我想做的是改变这一点: In [66]: df_test Out[66]: A B C
有人可以向我解释这种行为吗? import pandas as pd dates = pd.date_range('1/1/2000', periods=8) df = pd.DataFrame(np
鉴于 pandas 0.20.0 和 deprecation of .ix 的更新,我想知道使用剩余的 .loc 和 .iloc 获得相同结果的最有效方法是什么。我刚刚回答了this question
我在开发一些加载一组用户指定的共享对象的软件。我想向我们的“加载器”组件添加一些代码,该组件可以查询每个指定的共享对象并找出用于构建/链接该共享对象的编译器和编译器版本。 在过去,我已经能够使用“st
我只知道一个有效,另一个无效。 上下文: 我有一个数据结构F其中包含 Data.Map.Map k S到另一个数据结构 S .我的目标是建立一个 Lens给出 F和 k将描述 S 中的一个字段. 困难
假设我有一些相当简单的数据类型 Person有几个字段和一个包含 Person 集合的类型s。 data Person = Person { _name :: String, _age :: Int
我有两个 session 这样做。 Session 1>start transaction; Session 1>select * from account for update; Session 2
我是一名优秀的程序员,十分优秀!