Scala中是否有关于何时使用可变集合的val与使用带有不可变集合的var的指南?或者你真的应该用不可变的集合来瞄准val吗?
事实上,这两种类型的集合给了我很多选择,而且我常常不知道如何做出这种选择.
scalaz.Validation
据说比Try
monad 更强大,因为它可以累积错误.
是否有任何情况下,您可以选择Try
在scalaz.Validation
或scalaz.\/
?
类型类和抽象数据类型之间有什么区别?
我意识到这对于Haskell程序员来说是一个基本的东西,但我来自Scala背景,并且会对Scala中的示例感兴趣.我现在能找到的最好的是类型类是"开放的"而ADT是"封闭的".将类型类与结构类型进行比较和对比也是有帮助的.
haskell scala abstract-data-type typeclass structural-typing
有一个Scalaz地图透镜的例子在这里:丹·伯顿调用它containsKey
,并且它是由爱德华Kmett谈话的启发.mapVPLens
Scalaz 7中还有一些东西可用于修改地图中的值.
我的问题是:如果我有一个用于修改类型V
的镜头和一个用于a的镜头Map[K,V]
,我该如何编写它们?我一直在寻找一个简单的例子,但在Scalaz中仍然缺乏一些例子.
我对Scalaz 6和Scalaz 7解决方案都感兴趣.
Scala的一个优点是它可以让您很好地控制范围.您可以嵌套这样的函数:
def fn1 = {
def fn11 = {
...
}
def fn12 = {
...
def fn121 = {
...
}
}
...
def fn13 = {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是fn1可能开始看起来有点吓人.来自Java背景,我们建议保持足够小的功能,以便在IDE中的单个"页面"上查看.
你会怎么看待基于这个推理从fn1中取出fn12:"它现在只在fn1中使用,但它可能会在以后的其他地方有用......"
此外,您是否会优先考虑在何处放置嵌套函数 - 在调用它们的代码之前或之后?
如果系统中的某些实体可以充当数据或事件的生成者,而其他实体可以充当消费者,那么将这些"正交关注点"外化到生产者和消费者类型类中是否有意义?
我可以看到Haskell管道库使用这种方法,并且欣赏这个问题对于来自Haskell背景的人来说可能看起来非常基本,但是会对Scala视角和示例感兴趣,因为我看不到很多.
scala ×6
scalaz ×2
typeclass ×2
coding-style ×1
collections ×1
function ×1
haskell ×1
immutability ×1
lenses ×1
map ×1
monads ×1
nested ×1
scalaz7 ×1
validation ×1