我正在考虑编写代码生成器来从google protobuf定义文件生成scala.我认为它有价值的原因是Java绑定太过Java-ish而且在scala中可以做得更好.例如,对于以下定义
message Foo {
required int F1 = 1;
repeated string F2 = 2;
message Inner (
required int F3 = 1;
)
}
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样从Scala构造proto对象:
val foo = Foo (
F1(127),
F2("first", "second"),
Inner (
F3(911)
)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果有人知道已经存在的这些方面的东西,或者如果没有,你发现它值得开始一个新的项目吗?
给定一个键k在一个SortedMap,我怎么能有效地找到最大的关键m是小于或等于k,也是最小的关键n是大于或等于k.谢谢.
是否有必要从头开始提供实施?我找不到任何匹配的隐含,甚至没有最后的Implicits特征.seqDerivedOrdering显然不起作用,因为Array不是Seq.
据我所知,从scala stdlib声明一个地图并不会将它专门化为原始类型.我正在寻找的是不支付装箱/拆箱的价格,但同时有scala地图的界面.一个明显的选择是使用特洛伊地图,但我不相信有scala视图.任何帮助赞赏.
在随后的scala 2.10.0-M7会话中:
scala> trait A
defined trait A
scala> class B extends A
defined class B
scala> class C extends A
defined class C
scala> Some(0).fold(new B){_=>new C}
<console>:11: error: type mismatch;
found : C
required: B
Some(0).fold(new B){_=>new C}
Run Code Online (Sandbox Code Playgroud)
我希望编译器找到常见的超类型(即A)而不是抱怨.是一般的类型推理限制,还是Option.fold定义方式的结果?
谢谢.