此scala代码的幕后内容是什么?

cm

我有以下scala代码(来自FP In Scala书):

import scala.{Option => _, Either => _, Left => _, Right => _, _} // hide std library `Option` and `Either`, since we are writing our own in this chapter

case class Left[+E](get: E) extends Either[E,Nothing]
case class Right[+A](get: A) extends Either[Nothing,A]

sealed trait Either[+E,+A] {
 def map[B](f: A => B): Either[E, B] = this match {
   case Right(r) => Right(f(r))
   case Left(e) => Left(e)
 }

 def flatMap[EE >: E, B](f: A => Either[EE, B]): Either[EE, B] = this match {
   case Right(r) => f(r)
   case Left(e) => Left(e)
 }

 def map2[EE >: E, B, C](b: Either[EE, B])(f: (A, B) => C): Either[EE, C] = {
    this flatMap(aa => b map (bb => f(aa, bb)))
 }

}

我想知道当我这样调用map2时发生了什么:

val b = fpinscala.errorhandling.Right(2)
val a = fpinscala.errorhandling.Right("right")
val f = (a: String, b:Int) => a + b
a.map2(b)(f)

scala如何知道在此代码行中的函数中使用替代this(ie aaathis flatMap(aa => b map (bb => f(aa, bb)))map2

w

@jcm,看看这是否有意义。

a.map2(b)(f)

我们正在调用对象map2方法a在方法内部,代码a现在称为this

this flatMap(aa => b map (bb => f(aa, bb)))

现在,我们正在调用对象flatMap方法this(仍然是a)。

有什么flatMap作为论据?它需要一个函数,该函数需要一个参数(某种类型的参数,我们将其称为“ A”)并返回Either因此,这意味着括号之间的所有内容都是该函数。该函数没有名称(即没有def语句),因此通常称为匿名函数。

该函数带有一个参数。这段代码aa =>标识了自变量,以便以后可以在函数中引用它。“ aa”只是一个任意名称。我们本可以使用“ thisthat”或“ xyz”。

aa包含的价值从何而来?它出来了this考虑下面的代码。

List(4,7,9).map(x => 42 - x)

在这种情况下,将map调用匿名函数3次,一次针对List中的每个值。x每次调用该函数时,都会采用一个新值(第一个4,然后是7,然后是9)。

如果这一切有道理,那么对b map (bb => .....)应用相同的逻辑,您几乎就回家了!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

此Scala代码的Java等价物是什么?

来自分类Dev

此内容的RootElement是什么

来自分类Dev

此内容的RootElement是什么

来自分类Dev

此JavaScript代码的意义是什么?

来自分类Dev

此Java代码是什么意思

来自分类Dev

此Java代码结构的术语是什么?

来自分类Dev

此旧版代码的含义是什么?

来自分类Dev

此序言代码背后的逻辑是什么?

来自分类Dev

此sass代码是什么意思?

来自分类Dev

此JavaScript代码的目的是什么?

来自分类Dev

此VB代码是什么意思?

来自分类Dev

jQuery:此代码是什么意思?

来自分类Dev

此Java代码是什么意思

来自分类Dev

此代码是什么意思?OpenCV的

来自分类Dev

此Java代码中的错误是什么?

来自分类Dev

此JavaScript代码的意义是什么?

来自分类Dev

解释此代码的正确方法是什么?

来自分类Dev

此C ++代码内部的错误是什么?

来自分类Dev

编写此代码的更好方法是什么?

来自分类Dev

用此Jakarta邮件代码加密的内容是什么,为什么收到的电子邮件被标记为未验证?

来自分类Dev

此scala代码有什么作用?

来自分类Dev

在此scala代码中_的含义是什么?

来自分类Dev

此代码的输出是什么意思?printf(“%d”,“ x”);

来自分类Dev

此Haskell代码的语法规则是什么?

来自分类Dev

此代码在C语言中的输出是什么?

来自分类Dev

编写此指针函数代码的长格式是什么?

来自分类Dev

此代码在GCC中是什么意思?

来自分类Dev

此javascript / Jquery代码的执行顺序是什么?

来自分类Dev

此Haskell代码中的“ id”是什么意思?