Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala错误-正向引用扩展了值的定义_Scala - Fatal编程技术网

Scala错误-正向引用扩展了值的定义

Scala错误-正向引用扩展了值的定义,scala,Scala,我试图生成从1开始不包含在给定列表中的间隔列表。因此,我编写了如下所示的代码: def comparatorInt(first: (Int,Int), second: (Int, Int)) = first._2 <= second._1 val list1 = List((93,97), (5,10),(15,20),(30,50), (76,90)).sortWith(comparatorInt) var curr = 1 val res = for(x <- list1;

我试图生成从1开始不包含在给定列表中的间隔列表。因此,我编写了如下所示的代码:

def comparatorInt(first: (Int,Int), second: (Int, Int)) = first._2 <= second._1

val list1 = List((93,97), (5,10),(15,20),(30,50), (76,90)).sortWith(comparatorInt)

var curr = 1
val res = for(x <- list1; tmp = curr; curr = x._2+1) yield(tmp,x._1-1)

def comparatorInt(first:(Int,Int),second:(Int,Int))=first.\u 2理解的
中的
curr
与您的
var
不同。你写的相当于

var curr = 1
val res = for(x <- list1; tmp = anotherCurr; anotherCurr = x._2+1) yield(tmp,x._1-1)
var curr=1

val res=for(xfor
理解中的
curr
与您的
var
不同。您所写的与

var curr = 1
val res = for(x <- list1; tmp = anotherCurr; anotherCurr = x._2+1) yield(tmp,x._1-1)
var curr=1

val res=for(x另一个答案很好地解释了出现错误的原因。我只想补充一点:不要使用
var
,大多数时候你都不需要它们。如果你是用scala编写的,那么最好利用该语言的强大功能,保持习惯用语,而不是用有趣的语法编写相同的旧java代码:) 考虑这样的事情:

  ((0,0) :: list1).foldRight(List.empty[(Int,Int)]) { 
     case(x@(a, b), res@((c, d) :: tail)) if(b < c-1) => x :: (b+1, c-1) :: res 
     case(x, res)  => x :: res
  }.tail
((0,0)::list1.foldRight(List.empty[(Int,Int)]){
如果(bx:(b+1,c-1)::res
案例(x,res)=>x::res
}.尾巴

(除了不会导致编译错误外,这个版本也可以正常工作,不像您的版本,它有逻辑错误;)。

另一个答案很好地解释了为什么会出现错误。我只是想补充一点:不要使用
var
,大多数时候你并不需要它们。如果您是用scala编写的,那么最好利用该语言的强大功能并保持惯用性,而不仅仅是用有趣的语法编写相同的旧java代码:) 考虑这样的事情:

  ((0,0) :: list1).foldRight(List.empty[(Int,Int)]) { 
     case(x@(a, b), res@((c, d) :: tail)) if(b < c-1) => x :: (b+1, c-1) :: res 
     case(x, res)  => x :: res
  }.tail
((0,0)::list1.foldRight(List.empty[(Int,Int)]){
如果(bx:(b+1,c-1)::res
案例(x,res)=>x::res
}.尾巴

(除了不会导致编译错误外,这个版本也能正常工作,不像你的版本,它有逻辑错误;)。

IntelliJ有一个很好的代码分析器,可以很容易地找到这类东西。我是Eclipse的长期用户,但IntelliJ对于Scala来说要好得多。IntelliJ有一个很好的代码分析器,可以很容易地找到这类东西。我是Eclipse的长期用户,但IntelliJ对于Scala来说要好得多。非常感谢,这正是我所需要的。我对Scala还是新手,所以尽可能多地学习。。。我会继续你的建议。:)这将是非常有帮助的,如果你能建议一些链接来参考学习scala的高级功能,否则我只有在试图解决一些问题时才知道这些方法。非常感谢,这正是我所需要的。我对Scala还是新手,所以尽可能多地学习。。。我会继续你的建议。:)如果你能为学习scala的高级功能提供一些参考链接,这将非常有帮助,否则我只有在尝试解决一些问题时才知道这些方法。你应该接受另一个答案。实际答案是……你应该接受另一个答案。实际答案是。。