在for循环scala中产生值

时间:2018-05-19 15:09:13

标签: scala

我有3个代码,第1个是主代码,剩下的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 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)
}
}

代码2 =&gt;

var b=for{
h<-getkey(1)
i=h.gender} yield i
print(i)
} 
} 

第一个代码有o / p一些(男性)和2个nds o / p有一些(有些(男)) 为什么两个代码生成不同的o / p?如果我在getkey(1)中替换&lt; - with =,我会收到错误。为什么我们得到它?&lt; - in for的用途是什么?

1 个答案:

答案 0 :(得分:1)

以下是示例代码的略微简化版本:

$questions = Question::search($query_string)
    ->whereHas('categories', function($query) use($categoryIds) {
        $query->whereIn('id', $categoryIds);
    })->paginate(NUM_PER_PAGE);

代码段1

extension MainVC: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
} 

可以翻译成:

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)

代码段2

for {
  h <- getkey(1)
  i <- h.gender
} yield i

getkey(1).flatMap(_.gender) // res1: Option[String] = Some(Male) 是一项任务,for { h <- getkey(1) i = h.gender } yield i 与以下内容没有区别:

i = h.gender

可翻译为:

for-yield