在for循环scala中生成值
我有3个代码,第一个是主代码,其余2个代码用于循环,两个代码的功能相同。但都生成不同的o/p。 主代码=>在for循环scala中生成值,scala,Scala,我有3个代码,第一个是主代码,其余2个代码用于循环,两个代码的功能相同。但都生成不同的o/p。 主代码=> class user(var name:String,var id:Int, var gender:Option[String]) { override def toString="("+ name+","+id+","+gender+")" } object a { def main(args:Array[String]):Unit={ var mm=Map(1-> new us
class user(var name:String,var id:Int, var gender:Option[String])
{
override def toString="("+ name+","+id+","+gender+")"
}
object a
{
def main(args:Array[String]):Unit={
var mm=Map(1-> new user("jh",189,Some("Male")),2->new user("gh",12,None),3
->new user("io",100,Some("Female"))
def getkey(i:Int)=
{ mm.get(i)
}
代码1=>
var b=for{
h<-getkey(1)
i<-h.gender} yield i
print(i)
}
}
var b=for{
下面是示例代码的一个稍微简化的版本:
class User(var name: String, var id:Int, var gender: Option[String])
val mm = Map(
1 -> new User("jh", 189, Some("Male")),
2 -> new User("gh", 12, None),
3 -> new User("io", 100, Some("Female"))
)
def getkey(i:Int) = mm.get(i)
代码片段1:
for {
h <- getkey(1)
i <- h.gender
} yield i
for {
h <- getkey(1)
i = h.gender
} yield i
代码片段2:
for {
h <- getkey(1)
i <- h.gender
} yield i
for {
h <- getkey(1)
i = h.gender
} yield i
并可翻译为:
getkey(1).flatMap(_.gender)
// res1: Option[String] = Some(Male)
getkey(1).map(_.gender)
// res2: Option[Option[String]] = Some(Some(Male))
例1和例4正好解释了这一点。你拍了5555代表的截图了吗?我可以投票了吗?:)