在Scala中,您经常使用迭代器以for递增的顺序执行循环,如:
for(i <- 1 to 10){ code }
Run Code Online (Sandbox Code Playgroud)
你会怎么做,所以它从10变为1?我想10 to 1给出一个空的迭代器(就像通常的范围数学)?
我制作了一个Scala脚本,它通过在迭代器上调用reverse来解决它,但是在我看来它不是很好,下面的方法是什么?
def nBeers(n:Int) = n match {
case 0 => ("No more bottles of beer on the wall, no more bottles of beer." +
"\nGo to the store and buy some more, " +
"99 bottles of beer on the wall.\n")
case _ => (n + " bottles of beer on the wall, " + n +
" bottles of beer.\n" +
"Take one down …Run Code Online (Sandbox Code Playgroud) 在Scala 2.8中是否有一种方法来重载案例类的构造函数?
如果是的话,请把一个片段解释一下,如果没有,请解释原因?
在Scala中,我可以创建一个caseclass,case class Foo(x:Int)然后将它放在一个列表中,如下所示:
List(Foo(42))
Run Code Online (Sandbox Code Playgroud)
现在,这里没什么奇怪的.以下对我来说很奇怪.运算符::是列表中的函数,对吧?对于Scala中有一个参数的任何函数,我可以用中缀表示法调用它.一个例子是对象的1 + 2一个函数.我刚刚定义的类没有运算符,那么以下可能如何?(+)IntFoo::
Foo(40) :: List(Foo(2))
Run Code Online (Sandbox Code Playgroud)
在Scala 2.8 RC1中,我从交互式提示中获得以下输出:
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
Run Code Online (Sandbox Code Playgroud)
我可以继续使用它,但解释是什么?
我想创建一个scala函数,它返回一个scala元组.
我可以做这样的功能:
def foo = (1,"hello","world")
Run Code Online (Sandbox Code Playgroud)
这将工作正常,但现在我想告诉编译器我期望从函数返回什么而不是使用内置类型推断(毕竟,我不知道是什么(1,"hello","world")).
如何创建多个维度的数组?
例如,我想要一个整数或双矩阵,就像double[][]在Java中一样.
我知道Scala 2.8中的数组发生了变化,并且旧的数组已被弃用,但是现在有多种方法可以做到这一点,如果有的话,哪个最好?
我想在scala中使用Stream类无限地重复给定列表.
例如列表(1,2,3,4,5)我想创建一个给我的流(1,2,3,4,5,1,2,3,4,5,1,2,3) ....)
这样我就可以包装take操作了.我知道这可以通过其他方式实现,但我想出于某种原因这样做,只是幽默我:)
所以我的想法是,通过从某个列表创建的无限循环,我可以使用take操作,当它到达列表的末尾时,它会循环.
如何创建一个简单重复给定列表的流?
我发现Scala总是对任何东西都有"自然的解释".总是像"哦,但这只是一个函数被调用此函数和该对象与此参数".从某种意义上说,我们从其他语言中知道它并不是真正的编译器魔法.
我的问题是在以下代码中使用的< -运算符:
for(i <- 0 to 10) println(i)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我可以看到它被重写为:
0.to(10).foreach((i:Int)=>println(i))
Run Code Online (Sandbox Code Playgroud)
但这并没有解释我如何进入foreach函数内的匿名函数.在你写i的时候,它不是一个对象,也不是一个声明的变量.那是什么呢,它是如何被带到foreach的内部的呢?
我的猜测是,我终于发现了一些实际上是编译魔术的东西
谢谢你的时间.
为了澄清,我的问题是:如何做的< -在代码的第一线操作人员的工作,因为我不上它可作为函数调用的对象.
我正在使用解析器 - 组合器库在Scala中编写一个简单的函数式编程语言.
语法在此处指定:https://github.com/hejfelix/Frase/blob/master/src/main/scala/it/vigtig/lambda/ParserLike.scala
有一件事我无法通过实现来解决:如何将语法定义与转换为AST节点分开?
直接在解析器源中使用接近人类可读的语法真的很酷,特别是考虑到我是项目ATM上唯一的程序员,它可以作为文档.
如何分离语法和AST特定代码?
在Scala中,我想将字符串拆分为特定字符,如下所示:
scala> val s = "abba.aadd"
s: String = abba.aadd
scala> val (beforeDot,afterDot) = (s takeWhile (_!='.'), s dropWhile (_!='.'))
beforeDot: String = abba
afterDot: String = .aadd
Run Code Online (Sandbox Code Playgroud)
这个解决方案效率稍低(可能不是渐近),但我觉得标准库中可能存在这样的问题.有任何想法吗?
我在使用Visual Studio Code将新文件添加到基于.csproj的项目时遇到问题.我可以手动编辑.csproj文件,但这有点麻烦.VSCode是否支持自动处理.csprojects?