作者R. Kent Dybvig在第86页的"The Scheme Programming Language,4th Edition"一书中,作者define-syntax为一个case接受其条件范围的语句编写了一个(Scheme宏).我以为我会在Clojure中尝试这个.
这是结果.
我怎样才能改善这个?我用:ii,:ie,:ei,和:ee用于运营商的范围,分别表示包含性的包容性,包容独占的,独占的包,以及异排他性的,.有更好的选择吗?
我选择扩展到一个cond而不是离散的if陈述,因为我觉得我将从cond宏的任何未来改进中获益.
(defmacro range-case [target & cases]
"Compare the target against a set of ranges or constant values and return
the first one that matches. If none match, and there exists a case with the
value :else, return that target. Each range consists of a vector containing
3 terms: a lower bound, …Run Code Online (Sandbox Code Playgroud) 据我所知,如果我想定义一个defprotocol只能由一个实现的协议()defrecord,我仍然必须首先定义协议,然后定义defrecord实现它的协议:
(defprotocol AProtocol
(a-method [this])
(b-method [this that]))
(defrecord ARecord [a-field b-field]
AProtocol
(a-method [this] ...)
(b-method [this that] ...))
Run Code Online (Sandbox Code Playgroud)
有没有办法将两者结合起来,也许是用"匿名"协议?
我有一个调用RESTEasy(JAX-RS)Java服务器的Java客户端.我的一些用户可能拥有比服务器更新版本的客户端.
该客户端可以调用服务器上的资源,该资源包含服务器不知道的查询参数.是否有可能在服务器端检测到这一点并返回错误?
我理解,如果客户端调用尚未在服务器上实现的URL,则客户端将收到404错误,但如果客户端传入未实现的查询参数(例如:),会发生什么?sort_by=last_name?
在下面的代码中,我收到一个编译错误,指出我的'x'类型不匹配:
val someRef: java.lang.Long = 42L
someRef match {
case x: Long => println("The answer: " + x)
case _ => println("Unknown")
}
Run Code Online (Sandbox Code Playgroud)
如何让Scala在match语句中自动取消装箱someRef?
我正在考虑将我管理的Maven项目切换到Apache-Ant/Ivy.我需要更多地控制构建过程,并且对Maven感到非常沮丧.请不要评论Maven有多棒.我的问题是关于常春藤.
我想建立一个"标准"Ant构建模板,以后可以用于其他项目,只需要很少的更改.
我将建立一个中央"企业"存储库,我们可以放置在公共Maven存储库中不可用的第三方库(例如商业库,Sun库,专有库等).此企业存储库将在我们的本地LAN上提供,但可能无法从办公室外部获得.
每个开发人员都将拥有一个私有存储库~/.ivy/repository.我希望Ant构建能够使用企业存储库中已更改的库版本自动更新此私有存储库.
在~/.ivy/ant,我计划build.xml使用includeAnt 1.8中的任务放置"标准"模块以包含在单个项目文件中.这些模块将提供之类的东西Scala,并Clojure汇编目标与不同版本的不同Scala和Clojure的版本(如:scala-compile-2.9.1.xml,clojure-compile-1.3.xml等)构建模块将在企业仓库中,应该如果他们改变在私有仓库自动更新.
每个项目都将遵循一个标准的Maven目录结构:${project}/src/main/java,${project}/target/classes,等.
在过去,我尝试使用常春藤,但Ant构建文件必须非常大(模板构建文件> 500行)并且难以管理/编辑.我希望通过将标准目标放在~/.ivy/ant目录中的自己的构建模块中,我可以避免代码膨胀.
可以这样做吗?我离开基地了吗?我在Ivy上找到的唯一文档是在Apache网站(http://ant.apache.org/ivy).有没有其他文件,包括书籍?
我编写了一个Scala(2.9.1-1)应用程序,需要处理来自数据库查询的数百万行.我正在使用前面一个问题的答案中显示的技术转换ResultSet为a :Stream
class Record(...)
val resultSet = statement.executeQuery(...)
new Iterator[Record] {
def hasNext = resultSet.next()
def next = new Record(resultSet.getString(1), resultSet.getInt(2), ...)
}.toStream.foreach { record => ... }
Run Code Online (Sandbox Code Playgroud)
这非常有效.
由于foreach闭包的主体非常占用CPU,并且作为函数式编程的实用性的证明,如果我在.par之前添加一个foreach,则闭包并行运行而不需要其他工作,除了确保闭合的主体是线程安全的(它是以函数样式编写的,除了打印到线程安全日志之外没有可变数据).
但是,我担心内存消耗.是.par导致整个结果集在RAM中加载,或做并联运行负荷只有尽可能多的行,因为它有活动线程?我已经将4G分配给了JVM(64位-Xmx4g)但是将来我会在更多的行上运行它,并担心我最终会得到一个内存不足.
是否有更好的模式以功能方式进行这种并行处理?我一直在向同事们展示这个应用程序,作为函数式编程和多核机器价值的一个例子.
是否可以向F#区分联合添加常量字段值?
我可以这样做吗?
type Suit
| Clubs("C")
| Diamonds("D")
| Hearts("H")
| Spades("S")
with
override this.ToString() =
// print out the letter associated with the specific item
end
Run Code Online (Sandbox Code Playgroud)
如果我正在编写Java枚举,我会向构造函数添加一个私有值,如下所示:
public enum Suit {
CLUBS("C"),
DIAMONDS("D"),
HEARTS("H"),
SPADES("S");
private final String symbol;
Suit(final String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return symbol;
}
}
Run Code Online (Sandbox Code Playgroud) 作为学习Haskell(并折磨自己)的练习,我正在考虑编写一个可配置的Haskell代码美化器.
它将支持用JSON或YAML(或更好的东西?)编写的配置文件,它指定排序导入,排序/分组data和class语句,部分之间的行数等选项.
我正在寻找Haskell 98的解析器,它生成一个抽象语法树(AST)并保留注释.解析GHC及其语言扩展将是一个奖励.
在没有这样的事情的情况下,我想我可以编写一个递归下降的解析器或使用Parsec或解析器生成器的解析器.也许滚动我自己会增加学习(和折磨:-)).
在其中一个开源许可证下是否有完整的Haskell-> AST解析器?如果我在这个项目上取得任何进展,我会把它放在github上.
我正在编写我的第一个大型Scala程序.在Java等价物中,我有一个枚举,其中包含我的UI控件的标签和工具提示:
public enum ControlText {
CANCEL_BUTTON("Cancel", "Cancel the changes and dismiss the dialog"),
OK_BUTTON("OK", "Save the changes and dismiss the dialog"),
// ...
;
private final String controlText;
private final String toolTipText;
ControlText(String controlText, String toolTipText) {
this.controlText = controlText;
this.toolTipText = toolTipText;
}
public String getControlText() { return controlText; }
public String getToolTipText() { return toolTipText; }
}Run Code Online (Sandbox Code Playgroud)
别介意使用枚举的智慧.还有其他地方我想做类似的事情.
如何使用scala.Enumeration在Scala中执行此操作?Enumeration.Value类只接受一个String作为参数.我需要继承它吗?
谢谢.
Clojure程序如何找到自己的MANIFEST.MF(假设它打包在一个JAR文件中).
我试图从我的"-main"函数执行此操作,但我找不到要在以下代码中使用的类:
(.getValue
(..
(java.util.jar.Manifest.
(.openStream
(java.net.URL.
(str
"jar:"
(..
(class **WHAT-GOES-HERE**)
getProtectionDomain
getCodeSource
getLocation)
"!/META-INF/MANIFEST.MF"))))
getMainAttributes)
"Build-number"))
Run Code Online (Sandbox Code Playgroud)
谢谢.