- 浏览: 599408 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
下面是摘自 《Programming in Scala》关于 yield 的解释:
上面那段话的意义就是,for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是 Map,被循环的是 List,返回的就是 List,以此类推。
基于上面的信息,来看几个例子:
前面的例子都不算什么,还只是个开始. 接下来, 对我们初始集合的每个元素做一次翻倍:
这里是 for/yield 循环的求模操作:
Scala 数组上的 for 循环 yield 的例子
之前提到过 for 循环 yield 会构造并返回与给定集合相同类型的集合。为此,我们来看看以下用 Scala 数组上的例子。注意把 yield(我们可以把 yield 用作一个动词) 出来的集合类型与前面的几个例子对比:
正如你所见, 例子中被 yield 的是 Array[Int], 而更早的例子中返回的类型是 IndexedSeq[Int].
for 循环, yield, 和守卫( guards) (for loop 'if' conditions)
假如你熟悉了 Scala 复杂的语法,你就会知道可以在 for 循环结构中加上 'if' 表达式。 它们作为测试用,通常被认为是一个守卫,你可以把它们与 yield 语法联合起来用。参见:
如上, 加上了 "if e > 2" 作为守卫条件用以限制得到了只包含了三个元素的数组。
总结
如果你熟悉 Scala 的 loop 结构, 就会知道在 for 后的圆括号中还可以许更多的事情。你可以加入 "if" 表达式,或别的语句, 比如下面的例子,可以组合多个 if 语句:
yield 关键字的简短总结:
1.针对每一次 for 循环的迭代, yield 会产生一个值,被循环记录下来 (内部实现上,像是一个缓冲区)。
2.当循环结束后, 会返回所有 yield 的值组成的集合。
3.返回集合的类型与被遍历的集合类型是一致的。
For each iteration of your for loop, yield generates a value which will be remembered. It's like the for loop has a buffer you can't see, and for each iteration of your for loop, another item is added to that buffer. When your for loop finishes running, it will return this collection of all the yielded values. The type of the collection that is returned is the same type that you were iterating over, so a Map yields a Map, a List yields a List, and so on. Also, note that the initial collection is not changed; the for/yield construct creates a new collection according to the algorithm you specify.
上面那段话的意义就是,for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是 Map,被循环的是 List,返回的就是 List,以此类推。
基于上面的信息,来看几个例子:
scala> for (i <- 1 to 5) yield i res10: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)
前面的例子都不算什么,还只是个开始. 接下来, 对我们初始集合的每个元素做一次翻倍:
scala> for (i <- 1 to 5) yield i * 2 res11: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)
这里是 for/yield 循环的求模操作:
scala> for (i <- 1 to 5) yield i % 2 res12: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 0, 1, 0, 1)
Scala 数组上的 for 循环 yield 的例子
之前提到过 for 循环 yield 会构造并返回与给定集合相同类型的集合。为此,我们来看看以下用 Scala 数组上的例子。注意把 yield(我们可以把 yield 用作一个动词) 出来的集合类型与前面的几个例子对比:
scala> val a = Array(1, 2, 3, 4, 5) a: Array[Int] = Array(1, 2, 3, 4, 5) scala> for (e <- a) yield e res5: Array[Int] = Array(1, 2, 3, 4, 5) scala> for (e <- a) yield e * 2 res6: Array[Int] = Array(2, 4, 6, 8, 10) scala> for (e <- a) yield e % 2 res7: Array[Int] = Array(1, 0, 1, 0, 1)
正如你所见, 例子中被 yield 的是 Array[Int], 而更早的例子中返回的类型是 IndexedSeq[Int].
for 循环, yield, 和守卫( guards) (for loop 'if' conditions)
假如你熟悉了 Scala 复杂的语法,你就会知道可以在 for 循环结构中加上 'if' 表达式。 它们作为测试用,通常被认为是一个守卫,你可以把它们与 yield 语法联合起来用。参见:
scala> val a = Array(1, 2, 3, 4, 5) a: Array[Int] = Array(1, 2, 3, 4, 5) scala> for (e <- a if e > 2) yield e res1: Array[Int] = Array(3, 4, 5)
如上, 加上了 "if e > 2" 作为守卫条件用以限制得到了只包含了三个元素的数组。
总结
如果你熟悉 Scala 的 loop 结构, 就会知道在 for 后的圆括号中还可以许更多的事情。你可以加入 "if" 表达式,或别的语句, 比如下面的例子,可以组合多个 if 语句:
def scalaFiles = for { file <- filesHere if file.isFile if file.getName.endsWith(".scala") } yield file
yield 关键字的简短总结:
1.针对每一次 for 循环的迭代, yield 会产生一个值,被循环记录下来 (内部实现上,像是一个缓冲区)。
2.当循环结束后, 会返回所有 yield 的值组成的集合。
3.返回集合的类型与被遍历的集合类型是一致的。
发表评论
文章已被作者锁定,不允许评论。
-
Scala 在Intellij中搭建Scala环境(jdk8,scala2.11.4)
2017-06-02 16:33 14431.打开Intellij然后点击File->Plugin ... -
Scala Partial Functions(偏函数)学习
2017-04-24 10:54 344如果你想定义一个函数,而让它只接受和处理其参数定义域范围内的子 ... -
Scala 样本类(case class)和模式匹配(match)学习
2017-04-20 18:20 833样本类(case clas)和模式 ... -
Scala 作业题练习纪录
2017-04-20 14:39 10021.用reduceLeft获取集合中最大元素 println ... -
Scala 闭包理解
2017-04-20 13:57 663闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。 ... -
Scala 各种符号的含义(->,:::,::,<-,=>)
2017-04-20 09:50 651:::运算符 :::(三个冒号)表示List的连接操作,比如: ... -
Scala filter方法过滤集合元素(获取集合中的元素)
2017-04-19 14:44 2079Problem 你想要筛选出集合中的一些元素形成一个新的集合 ... -
Scala apply方法学习(类和对象都存在apply方法)
2017-04-19 10:18 731Scala比Java更面向对象的一个方面是Scala没有静态成 ... -
Scala Map(映射)学习
2017-04-18 09:20 431Map(映射)是一种可迭代的键值对(key/value)结构。 ... -
Scala 元组Tuple学习
2017-04-17 16:12 641元组是Scala提供的一种 ... -
Scala 函数之map(返回集合)、reduce、flatMap、zip和foreach(无返回值)学习
2017-04-17 15:04 2231map和flatMap的区别 object collect ... -
Scala 符号 => 的用法(匿名函数(x:Int)=>x+1)
2017-04-17 10:58 6991. 表示函数的类型(Function Type) de ... -
Scala 下划线(_)的多种应用场景学习
2017-04-13 20:00 5881、作为“通配符”,类似Java中的*。如import sca ... -
Scala mkString方法(把一个集合转化为一个字符串)
2017-04-13 19:34 1207Problem 如果你想要把集合元素转化为字符串,可能还会添加 ... -
Scala 基本概念学习
2017-04-13 14:40 537Type Inference类型推断 当你声明的任何变量时,你 ...
相关推荐
Swift和Scala都提供了常见的控制流结构,如for循环、while循环和if条件语句。 在for循环中,Swift使用for-in来遍历集合或进行范围迭代,例如`for i in 1...5 { print("i=\(i)") }`,而Scala使用`for (i ) yield i^2...
在这个例子中,`for`循环首先过滤出偶数,然后将结果乘以2。 通过深入理解这些基本的控制结构和输入输出机制,开发者可以在Scala中编写出高效、优雅的代码。在实际编程中,灵活运用这些知识可以提高代码的可读性...
初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到底用来做什么,为什么要设计 yield ?本文将由浅入深地讲解 yield 的概念和...
值得注意的是,Scala中的for循环支持一种特殊的模式,允许开发者使用守卫条件和yield关键字来创建复杂的迭代逻辑。 6. **Pattern Matching(模式匹配)**:Scala的模式匹配功能强大,不仅可以用于匹配简单的值,还...
- for循环支持多种写法,可以使用 `yield` 关键字生成新的集合。 - foreach循环适用于遍历集合,可以接收其他函数作为参数。 **9. Scala函数的参数** - **Call By Value**:参数在调用时计算一次。 - **Call By ...
- **For表达式**:Scala的`for`循环使用`yield`关键字生成序列,`for (i )`生成1到10的区间。 **Scala函数特性**: - **定义函数**:函数可以有参数、返回值,函数体最后一行表达式的值即为返回值。 - **匿名函数**...
- `for`循环支持`yield`关键字,用于构建新的集合。 #### 三、高级特性 ##### 3.1 方法与函数 - **方法**:定义在类或对象中,可以有参数和返回值。 - **函数**:一种独立存在的值,可以作为参数传递或从方法返回...
`for` 表达式是Scala中非常强大的工具之一,它允许我们以简洁的方式处理嵌套循环和其他复杂的逻辑。此外,`for` 表达式还支持一些特殊的语法特性,如使用 `{}` 代替 `()` 来推断分号,内联赋值、守卫表达式(guards...
- `for` 循环提供了丰富的功能,支持迭代、过滤(`if` 条件)和映射(`yield`)等功能。 - `while` 循环和 `do...while` 循环也得到了支持。 - **条件语句**: - 使用 `if...else` 结构进行条件判断。 - `match`...
8. **`for`推导**:Scala的`for`循环语法糖可以优雅地组合多个高阶函数操作,提高代码可读性。例如,`for (x ) yield x * x`将返回列表中偶数元素的平方。 9. **类型推断**:Scala具有强大的类型推断系统,允许...
此外,Scala的for推导(comprehensions)是一种强大的循环和组合数据的工具,它可以用来遍历集合、执行过滤、映射和折叠等操作。例如,`for (x ) yield computation(x)`,这会创建一个新的列表,其中包含满足条件的...
2. **for 循环**:使用 for 表达式时,应将条件表达式放在 `yield` 之前,以保持代码整洁。例如: ```scala // 不推荐 for (file ) if (hasSoundFileExtension(file) && !soundFileIsLong(file)) soundFiles +=...
- **循环控制**:Scala提供了`for`循环和`while`循环,其中`for`循环更为常用。 - **方法与函数**: - 方法定义:Scala的方法定义与Java相似,但更简洁。 - 函数定义:在Scala中,函数被视为第一类公民,可以被...
Slick 是 TypeSafe 推出的 Scala 数据库访问库。开发者可以使用 Scala 语言风格来编写数据查询,而不是用 SQL,示例代码: object Coffees extends Table[(String, Int, Double)]("COFFEES") { def name = column...
5. **语句块与流程控制**:Scala的流程控制结构包括条件语句(`if/else`)、循环(`for`、`while`)和异常处理(`try/catch/finally`)。`for`循环可以与`yield`结合创建新的集合。 6. **方法**:方法定义使用`def`...
为了更好地理解`Future`和`Promise`的作用,我们首先来看一个具体的例子:计算108(即1亿)个整数的和。对于这个问题,我们可以采用多种不同的方法来解决: 1. **Java 的 ExecutorService** 2. **Java 的 ForkJoin...
for推导式可以很容易地与if和yield一起使用,以执行过滤和转换操作。 集合也是Scala中非常重要的概念,包括列表(List)、元组(Tuple)和范围(Range)。Scala的列表是不可变的,可以使用::操作符来构造列表。元组...
Scala的FOR循环具有独特的语法结构,支持嵌套循环、条件过滤等功能。通过引入`yield`关键字,还可以将其转换为生成器,用于创建列表或其他集合类型。 ```scala val numbers = for (i ) yield i * i println(numbers...
此外,Scala的`for`循环还支持高级的嵌套循环和条件过滤: ```scala for (i ; j != j) { print((10 * i + j) + "") } ``` 这段代码通过一个高级`for`循环生成了一系列数字组合。 **2.6 求偶数** 为了求解偶数,...