我正在尝试使用以下代码匹配Scala 2.8(beta 1)中的选项组:
import scala.xml._
val StatementPattern = """([\w\.]+)\s*:\s*([+-])?(\d+)""".r
def buildProperty(input: String): Node = input match {
case StatementPattern(name, value) => <propertyWithoutSign />
case StatementPattern(name, sign, value) => <propertyWithSign />
}
val withSign = "property.name: +10"
val withoutSign = "property.name: 10"
buildProperty(withSign) // <propertyWithSign></propertyWithSign>
buildProperty(withoutSign) // <propertyWithSign></propertyWithSign>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.匹配可选正则表达式组的正确方法是什么?
我想知道for-each和for-in循环中AS3中的Array,Dictionary和Object类型的迭代顺序.还有哪些因素可以改变这些循环类型组合的迭代顺序?
例如,我假设在Array类型上使用for-each总是从第一个元素移动到最后一个元素.For-each不能在Dictionary上使用,那么如何使用for-in循环确定顺序?
我想知道是否可以直接使用CFG或PEG语法作为代码完成的基础而无需修改.我听说IDE中的代码完成有时会被操纵和按摩,甚至是硬编码,因此它的性能更好.
我想在一个小型DSL上完成代码编写,所以我完全理解一个语法不能帮助一个具有库函数等知识的代码完成系统.
据我所知,解析器本身至少需要提供一个系统来查询接下来的内容.
我想知道是否有可能从下面的语法中获得匹配正则表达式生成的MatchData.
object DateParser extends JavaTokenParsers {
....
val dateLiteral = """(\d{4}[-/])?(\d\d[-/])?(\d\d)""".r ^^ {
... get MatchData
}
}
Run Code Online (Sandbox Code Playgroud)
一个选项当然是在块内再次执行匹配,但由于RegexParser已经执行了匹配,我希望它将MatchData传递给块,或者存储它?
是否可以在Scala中并行分配元组成员.如果没有,是否有其他技术可以完成类似的事情?
val players = List(
new Player("Django Reinhardt", 42),
new Player("Sol Hoopii", 57),
new Player("Marc Ribot", 64)
)
val winners, losers = players.partition(p => p.score > 50)
// winners = List(Player name:Sol Hoopii score: 57, Player name:Marc Ribot score: 64)
// losers = List(Player name:Django Reinhardt score: 42)
Run Code Online (Sandbox Code Playgroud) 我最近一直在尝试在AS3中实现一些干净的编码实践.其中之一就是不要从包含对象中放弃对Arrays的引用.关键是我控制从一个类添加和删除,并且该阵列的所有其他用户都接收只读版本.
目前只读版本是我编写的ArrayIterator类,它实现了一个典型的Iterator接口(hasNext,getNext).它还扩展了Proxy,因此它可以像Array一样用于每个循环.
所以我的问题是,这不是许多语言的基本特征吗?能够传递对集合的只读视图的引用吗?
此外,现在AS3中的集合的类型安全性得到了改进,以Vector类的形式,当我在VectorIterator中包装一个Vector时,为了不变性而丢失了输入.有没有办法在AS3中实现这两种欲望,不变性和打字?
快速问题,我一直在为AS3项目寻找一个简单的日志工具(我不想要任何Flex依赖项),到目前为止我的印象是没有积极开发的项目.
我需要的是基本日志记录,以及允许我将日志记录发送到文件的适配器(可能使用AIR和LocalConnection),也许可以发送到html div等.
有人对一个简单,轻量级的项目有任何意见吗?
我正在尝试为下面的命令定义语法.
object ParserWorkshop {
def main(args: Array[String]) = {
ChoiceParser("todo link todo to database")
ChoiceParser("todo link todo to database deadline: next tuesday context: app.model")
}
}
Run Code Online (Sandbox Code Playgroud)
第二个命令应该标记为:
action = todo
message = link todo to database
properties = [deadline: next tuesday, context: app.model]
Run Code Online (Sandbox Code Playgroud)
当我在下面定义的语法上运行此输入时,我收到以下错误消息:
[1.27] parsed: Command(todo,link todo to database,List())
[1.36] failure: string matching regex `\z' expected but `:' found
todo link todo to database deadline: next tuesday context: app.model
^
Run Code Online (Sandbox Code Playgroud)
据我所知,它失败了,因为匹配消息的单词的模式几乎与属性键的键的模式相同:值对,因此解析器无法分辨消息的结束位置和属性的开始.我可以通过坚持为每个属性使用开始令牌来解决这个问题,如下所示:
todo link todo to database :deadline: next tuesday …
Run Code Online (Sandbox Code Playgroud) 有没有让jEdits键盘控件的行为与原生Mac OS应用程序相同?
通过表现我的意思是命令+左移动插入符号到行的开头,alt + left移动到当前单词的开头等.
我想知道是否有某种方法可以解压缩AS3中的可变长度参数列表.以此为例:
public function varArgsFunc(amount:int, ...args):Array
{
if (amount == 3)
{
return args
}
else
{
return varArgsFunc(++amount, args)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我这样称呼:
var result:Array = varArgsFunc(0, [])
Run Code Online (Sandbox Code Playgroud)
result现在包含一组嵌套的数组:
[[[[]]]]
Run Code Online (Sandbox Code Playgroud)
这里的问题是args参数被视为一个数组.因此,如果我将它传递给具有可变参数列表的函数,它将被视为单个参数.
在Scala中有:_*运算符,它告诉编译器将列表拆分为参数列表:
var list:Array = ['A', 'B', 'C']
// now imagine we have this class, but I would like to pass each list element
// in as a separate argument
class Tuple {
public function Tuple(...elements)
{
// code
}
}
// if you do this, the list will become be …
Run Code Online (Sandbox Code Playgroud)