是否可以将元数据附加到Clojure gen-class?
我正在尝试实现一个使用库的服务器,该库需要将Java注释添加到类中.
从Chas Emerick等人,即将出版的书"Programming Clojure"(第9.7.3节)中,向gen-class方法添加注释很容易,但没有提到添加类级别的注释.
在另一个问题中,我询问了Java的并发多图.
是否有一些函数式编程(不可变)模式可以在Scala或Clojure程序中使用?我认为Scala解决方案可能涉及演员和clojure一个atom,ref或者agent,但是可能有更好的方法.由于两种语言都允许"回退"到Java互操作并只使用Java解决方案,我可以使用我在第一个问题中得到的任何答案,但这不符合函数式编程范例.Haskell程序员如何解决这个问题?
在我写的Scala代码中,我有一个Map[String, AnyRef].当我尝试使用以下内容初始化Map时,Scala抱怨它期望a Map[String, AnyRef]但值为Map[String, Any]:
val myMap: Map[String, AnyRef] =
Map("foo" -> true, "bar" -> false)
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用以下代码:
val myMap: Map[String, AnyRef] =
Map("foo" -> true.asInstanceOf[AnyRef], "bar" -> false.asInstanceOf[AnyRef])
Run Code Online (Sandbox Code Playgroud)
我在范围内声明了以下内容:
implicit def booleanToAnyRef(value: Boolean): AnyRef = value.asInstanceOf[AnyRef]
Run Code Online (Sandbox Code Playgroud)
但编译器仍然抱怨.
编译器不应该使用隐式方法将原始布尔值转换为AnyRef值吗?有没有办法,缺少(丑陋)x.asInstanceOf[AnyRef]这些转换?
我试图使用Scala 2.10中的新方法将scala.collection.immutable.List一对对转换为a ,但是我得到一个编译时错误:scala.collection.immutable.SortedMapto
scala> List((1, "Fred"), (2, "Barney")).to[scala.collection.immutable.SortedMap]
<console>:10: error: scala.collection.immutable.SortedMap takes two type parameters, expected: one
List((1, "Fred"), (2, "Barney")).to[SortedMap]
^
Run Code Online (Sandbox Code Playgroud)
可以使用该to方法完成吗?我错过了中间方法调用吗?
我正在编写一个函数,它接收几个可选String值并将每个值转换为a Int或a Boolean,然后将转换后的值传递给Unit函数以进行进一步处理.如果任何转换失败,整个函数将失败并显示错误.如果所有转换都成功,则该函数应处理转换后的值并返回成功.
这是我写的函数(从实际中简化):
f(x: Option[String], y: Option[String], z: Option[String]): Result = {
val convertX = x.map(value => Try(value.toInt))
val convertY = y.map(value => Try(value.toBoolean))
val convertZ = z.map(value => Try(value.toBoolean))
val failuresExist =
List(convertX, convertY, convertZ).flatten.exists(_.isFailure)
if (failuresExist) BadRequest("Cannot convert input")
else {
convertX.foreach {
case Success(value) => processX(value)
case _ =>
}
convertY.foreach {
case Success(value) => processY(value)
case _ =>
}
convertZ.foreach {
case Success(value) => processZ(value)
case _ =>
} …Run Code Online (Sandbox Code Playgroud) 如何从行尾为回车 (CR)、换行 (NL) 或两者的文件中读取行?
PDF 规范允许行以 CR、LF 或 CRLF 结尾。
bufio.Reader.ReadString()并bufio.Reader.ReadBytes()允许单个分隔符字节。
bufio.Scanner.Scan()处理\n可选的前面\r,但不是一个单独的\r。
行尾标记是一个可选的回车符,后跟一个强制换行符。
我需要编写自己的函数bufio.Reader.ReadByte()吗?
我有一个List a和一个Maybe a.我想附加可能的值,如果它是,Just a但如果它是什么都不做Nothing.
这就是我目前使用的:
aList ++ case maybeValue of
Just value ->
[ value ]
Nothing ->
[]
Run Code Online (Sandbox Code Playgroud)
这样做有更好的(更惯用的)方法吗?
请注意,如果有更简洁的方法,那么前置也很好.列表顺序无关紧要.
我有两个Java类层次结构,它们共享一个共同的祖先并实现一个通用接口.我需要将指向其中一个的指针传递给另一个类中的方法.
interface I { ... }
class A extends java.awt.Component implements I { ... }
class B extends java.awt.Component implements I { ... }
class D {
Component c;
I i;
void m(? x) {
c = (Component) x;
i = (I) x;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么东西我可以替换' ?',这将允许我通过' A'或' B'?如果我将' x'转换为' java.awt.Component并将其存储在' c'并将其I存储在' i'中,我将失去强类型的好处.
我需要申报吗?
class D {
void m(java.awt.Component c, I i) { ... }
}
Run Code Online (Sandbox Code Playgroud)
并用' m(a, a)'或' m(b, …
clojure.lang的JavaDocs等在线提供吗?我是否需要自己从Clojure源代码构建它?
谢谢.
许多博客都引用了clojure.xml/emit(或clojure.contrib.lazy-xml/emit)函数,但1.2文档似乎没有.
它被弃用了吗?什么取代了它?
它可以用来编写Clojure编码的XML(例如:) {:tag :address :content {:tag :street ...} }吗?
更新:我查看了clojure.contrib.lazy-xml/emit(由Chris Houser提供)的源代码,虽然它也不是"官方",但它看起来比一个更稳定的解决方案clojure.xml/emit.
顺便说一下,我已经"发现"了clojure和clojure-contrib源代码作为写得好的惯用语Clojure(特别是由大师,Rich Hickey,两个Stuarts,Chris Houser等编写的部分)的很好的例子.我会需要花一些时间研究那些代码.