是否可以使用Scala中的模式匹配系统进行比较?例如:
a match {
case 10 => println("ten")
case _ > 10 => println("greater than ten")
case _ => println("less than ten")
}
Run Code Online (Sandbox Code Playgroud)
第二个案例陈述是非法的,但我希望能够指定"当a大于"时.
我正在编写一些使用Apache POI API的Scala代码.我想迭代java.util.Iterator
我从Sheet类中获得的行.我想在for each
样式循环中使用迭代器,所以我一直在尝试将其转换为原生的Scala集合,但没有运气.
我查看了Scala包装器类/特性,但我看不出如何正确使用它们.如何在不使用详细while(hasNext()) getNext()
循环样式的情况下迭代Scala中的Java集合?
这是我根据正确答案编写的代码:
class IteratorWrapper[A](iter:java.util.Iterator[A])
{
def foreach(f: A => Unit): Unit = {
while(iter.hasNext){
f(iter.next)
}
}
}
object SpreadsheetParser extends Application
{
implicit def iteratorToWrapper[T](iter:java.util.Iterator[T]):IteratorWrapper[T] = new IteratorWrapper[T](iter)
override def main(args:Array[String]):Unit =
{
val ios = new FileInputStream("assets/data.xls")
val workbook = new HSSFWorkbook(ios)
var sheet = workbook.getSheetAt(0)
var rows = sheet.rowIterator()
for (val row <- rows){
println(row)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,其中有许多硬件传感器通过RS232串口连接到部署机器.
但是......我正在开发一台没有物理RS232串口的机器,但是我想制作一些可以连接的假串口,并输出数据,目的是伪造硬件传感器的输入.
有谁知道在Windows XP上创建假串口并控制它的方法?
windows serial-port virtual-serial-port mocking hardware-interface
从Scala中的String末尾删除最后一个字符的最简单方法是什么?
我发现Rubys String类有一些非常有用的方法,比如chop.我会在Scala中使用"oddoneoutz".headOption,但它是折旧的.我不想陷入过于复杂的境地:
string.slice(0, string.length - 1)
Run Code Online (Sandbox Code Playgroud)
请有人告诉我有一个很好的简单方法,如剁这种常见的东西.
嗨,我正在研究iPhone开发,而Objective-C不是我的首选语言.据我所知,目前Ruby还不能用于与iPhone上的Cocoa Touch交谈.
所以我的问题是,我错了吗?我可以在iPhone上使用Ruby来开发Cocoa Touch应用程序吗?iPhone上的Ruby的未来是什么样的?
嘿那里,我正在尝试对字符串执行向后正则表达式搜索,将其划分为3位数组.从AS3 文档中我可以看到,在reg ex引擎中无法向后搜索.
这个练习的目的是将三元组逗号插入到这样的数字中:
10000000 => 10,000,000
Run Code Online (Sandbox Code Playgroud)
我想这样做:
string.replace(/(\d{3})/g, ",$1")
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,因为搜索没有从后面发生,替换$ 1只适用于第一场比赛.
我感觉我会更好地使用循环执行此任务.
更新:
由于AS3不支持前瞻,这就是我解决它的方法.
public static function formatNumber(number:Number):String
{
var numString:String = number.toString()
var result:String = ''
while (numString.length > 3)
{
var chunk:String = numString.substr(-3)
numString = numString.substr(0, numString.length - 3)
result = ',' + chunk + result
}
if (numString.length > 0)
{
result = numString + result
}
return result
}
Run Code Online (Sandbox Code Playgroud) 是否可以包含运行Scala解释器的jar文件?
当我从scalac编译时,我的代码正在工作:
scalac script.scala -classpath *.jar
Run Code Online (Sandbox Code Playgroud)
但我希望能够在运行解释器时包含一个jar文件.
我正在尝试使用jEdit作为编写Scala代码的主编辑器.
沿着jEdit,我正在使用Apache Buildr和DTerm.这一切都运行良好,除了我真的不确定如何在大型IDE之外调试Scala应用程序?
是否有推荐的实践/工具用于在IDE之外进行调试?
我有一个XML节点,我希望随着时间的推移添加子节点:
val root: Node = <model></model>
Run Code Online (Sandbox Code Playgroud)
但我看不到像addChild()这样的方法,因为我想写下以下内容:
def addToModel() = {
root.addChild(<subsection>content</subsection>)
}
Run Code Online (Sandbox Code Playgroud)
因此,在单个调用此方法之后,根xml将是:
<model><subsection>content</subsection></model>
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一可以附加节点的类是NodeBuffer.我错过了一些基本的东西吗?
让我们说我认识一个不熟悉C++的人.他没有绕过指针(正确地说是这样),但他拒绝通过引用传递.他总是使用传值.原因是他觉得"通过引用传递物体是一种破碎设计的标志".
该程序是一个小型图形程序,大多数传递的问题是数学Vector(3元组)对象.有一些大的控制器对象,但没有比这复杂.
我发现很难找到一个反对只使用堆栈的杀手论点.
我认为按值传递对于诸如向量之类的小对象是好的,但即使这样,代码中也会发生许多不必要的复制.按值传递大型对象显然是浪费,很可能不是您想要的功能.
在专业方面,我相信堆栈在分配/解除分配内存方面更快,并且具有恒定的分配时间.
我能想到的唯一主要论点是堆栈可能会溢出,但我猜这是不可能发生的?是否有任何其他参数反对仅使用堆栈/传递值而不是通过引用传递?
scala ×6
c++ ×1
cocoa-touch ×1
collections ×1
debugging ×1
interpreter ×1
ios ×1
iphone ×1
jar ×1
java ×1
mocking ×1
pass-by-name ×1
regex ×1
ruby ×1
serial-port ×1
string ×1
windows ×1
workflow ×1
xml ×1