任务是编写一个函数,该函数生成给定数量的整数,这些整数不大于另一个给定数字。我现在的代码看起来像那样:
scala> def lotto(count: Int, max: Int): Seq[Int] = {
| var result = Seq[Int]();
| var x: Int = 0;
| for(x <- 1 to count){
| result = scala.util.Random.nextInt(max) :+ result
| }
| }
<console>:13: error: value :+ is not a member of Int
result = scala.util.Random.nextInt(max) :+ result
^
<console>:12: error: type mismatch;
found : Unit
required: Seq[Int]
for(x <- 1 to count){
^
它没有编译,你可以看到。有人可以解释一下这里有什么问题吗?
答案 0 :(得分:6)
编译器指出的一些事情。
:+
应该应用于result
。 :+
是Seq
上的方法。按照您所做的方式调用它会尝试在Int
上调用它,因为错误说不存在。短篇小说是交换订单,如下所示。
Scala返回方法中的最后一个值。因此,将result
添加到结尾作为返回值。
def lotto(count: Int, max: Int): Seq[Int] = {
var result = Seq[Int]();
var x: Int = 0;
for(x <- 1 to count){
result = result :+ scala.util.Random.nextInt(max)
}
result
}
运行它:
scala> lotto(10, 100)
res0: Seq[Int] = List(41, 75, 80, 80, 33, 44, 3, 24, 20, 28)
用于理解的可修改的更简洁版本将是使用fill
Seq.fill(count)((scala.math.random * max).toInt)
甚至:
Seq.fill(count)(util.Random.nextInt(max))
答案 1 :(得分:3)
更为惯用的方式是:
def lotto(count: Int, max: Int): Seq[Int] =
for (x <- 1 to count) yield scala.util.Random.nextInt(max)
当您使用函数式编程样式编程时,请避免使用可变数据(var
)。