我读了一篇关于部分统一的文章,作者提到了左偏和右偏的数据类型.
有人可以向我解释一下,什么是左偏和右偏的数据类型?
它与Function1有什么关系?
是Either左侧偏置或右侧偏置?
我有办法
def foo(num: Int): String
Run Code Online (Sandbox Code Playgroud)
我在代码中的某些地方调用了某些地方,一切都很好。
最近,我遇到一种情况,我需要调用相同的方法,但是需要使用一些参数int值,我需要返回2个String,而不仅仅是一个。我当前的实现方式是:
def foo(num: Int): List[String]
Run Code Online (Sandbox Code Playgroud)
每次调用foo并获取1个 String时,我都会得到列表的开头,每次调用并返回2个字符串时,我都将获得[0,1]中的元素(我知道当我调用时foo(10),我得到2个字符串,其余的-只有一个)。
是否有更惯用的scala /功能?
看看Haskell的EitherMonad,有一个>>=功能.
Prelude Map> let add100 = \x -> Right (x+100 :: Int)
Prelude Map> x
Right 5
Prelude Map> x >>= add100
Right 105
Prelude Map> let y = Left "..." :: Either String Int
Prelude Map> y >>= add100
Left "..."
Run Code Online (Sandbox Code Playgroud)
但是,为什么Scala Either[A,B]没有flatMap,即相当于>>=函数?
scala> e
res5: Either[String,Int] = Right(1)
scala> e.
asInstanceOf fold isInstanceOf isLeft isRight
joinLeft joinRight left right swap
toString
Run Code Online (Sandbox Code Playgroud)
此外,有什么意义left和right?
scala> e.left
res6: …Run Code Online (Sandbox Code Playgroud)