小编kcr*_*ris的帖子

ANTLR 歧义

我需要匹配ANTLR包含由 / 分隔的 2 个字段的消息,第一个字段可以有1..3数字,第二个字段可以有1..2数字,

这不起作用

msg: f1 '/' f2;

f1: DIGIT(DIGIT(DIGIT)?)? ;
f2: DIGIT(DIGIT)?
Run Code Online (Sandbox Code Playgroud)
  1. 在这种情况下,如何避免歧义?
  2. 有没有更优雅的方式来表达重复次数ANTLR

非常感谢克里斯

parsing antlr ambiguous-grammar

5
推荐指数
1
解决办法
553
查看次数

QTcpSocket真的是全双工吗?

BSD流套接字是全双工的,这意味着两个连接方可以同时发送/接收.

QTcpSocket(qt套接字实现)具有异步支持,非阻塞模式,但只能属于一个线程,请参阅qt docs.

事件驱动的对象只能在单个线程中使用.具体而言,这适用于计时器机制和网络模块.

假设我想要一个transmit/tx线程和一个单独的receive/rx线程来使用相同的套接字并同时发送/接收数据.

根据我的理解,这可以通过qt信号/插槽"完成",但套接字线程永远不会真正同时执行send()和receive().它只运行事件循环,它将以串行方式执行此操作,并在发送/接收完成时发出信号.

是的,我的rx和tx线程可以同时工作并通过qt插槽处理通知,但套接字本身从未真正用于全双工模式.

这样说是正确的:只考虑一个端点,在套接字线程中,它的send()和receive()调用总是串行的,永远不会同时发生?(因为事件循环线程只是一个线程)

c++ sockets qt multithreading

2
推荐指数
1
解决办法
671
查看次数

scala 类型擦除 - 匹配案例类

我正在阅读有关类型擦除的内容,在这里

case class Thing[T](value: T)

def processThing(thing: Thing[_]) = {
  thing match {
    case Thing(value: Int) => "Thing of int"         //isn't thing Thing[_] anymore?
    case Thing(value: String) => "Thing of string"   //isn't thing Thing[_] anymore?
    case Thing(value: Seq[Int]) => "Thing of Seq[Int]"         //value=Seq[_] really
    case Thing(value: Seq[String]) => "Thing of Seq[String]"   //value=Seq[_] really
    case _ => "Thing of something else"
  }
}
println(processThing(Thing(Seq(1,2,3))))          //type erased, I get it
println(processThing(Thing(Seq("hello", "yo"))))  //type erased, I get it
println(processThing(Thing(1)))                   //why is this …
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching type-erasure

1
推荐指数
1
解决办法
344
查看次数