小编Ral*_*lph的帖子

Clojure stripMargin

Scala提供了一个名为stripMargin的方法,它将多行字符串的左侧部分删除到指定的分隔符(默认值为"|").这是一个例子:

"""|Foo
   |Bar""".stripMargin
Run Code Online (Sandbox Code Playgroud)

返回字符串

Foo
Bar
Run Code Online (Sandbox Code Playgroud)

在Clojure中有类似的功能吗?如果没有,你将如何实现它(功能最多)?

谢谢.

更新:我给出的例子不完整.stripMargin方法还在分隔符后保留空格:

"""|Foo
   |   Bar""".stripMargin
Run Code Online (Sandbox Code Playgroud)

返回字符串

Foo
   Bar
Run Code Online (Sandbox Code Playgroud)

xml string scala clojure

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

如何向通过 Clojure 中的 def 定义的序列添加元/注释?

我不得不注释掉下面的行(示例来自http://en.wikibooks.org/wiki/Clojure_Programming/Examples/Lazy_Fibonacci

(def fib-seq
  ;"Implements Fibonacci sequence (starts with 0)."
  ((fn rfib [a b] 
     (lazy-seq (cons a (rfib b (+ a b)))))
   0 1))
Run Code Online (Sandbox Code Playgroud)

如果我把它留在里面,我会得到:

Clojure 1.2.0
java.lang.Exception: Too many arguments to def (Problem1.clj:1)
1:1 user=>
Run Code Online (Sandbox Code Playgroud)

但是,我可以用 来做到这一点defn。示例(我知道,我正在重新发明轮子,even?因为已经定义了):

(defn is-even? [n]
  "Returns true if the number is even, false otherwise."
  (== (mod n 2) 0))


Clojure 1.2.0
1:1 user=> (is-even? 3)
false
1:2 user=> (is-even? 4)
true
1:3 user=>
Run Code Online (Sandbox Code Playgroud)

metadata function clojure

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

为什么Scala将List [Any]列为[Long]?

在以下代码中:

def test(list: List[Any]): Unit = {
  list.foreach {
    v =>
    v match {
      case r: AnyRef => println(r + ": " + r.getClass.getName)
      case d: Double => println(d + ": Double")
      case f: Float=> println(f + ": Float")
      case b: Byte => println(b + ": Byte")
      case c: Char => println(c + ": Char")
      case s: Short => println(s + ": Short")
      case i: Int => println(i + ": Int")
      case l: Long=> println(l + ": Long")
      case b: …
Run Code Online (Sandbox Code Playgroud)

scala primitive-types

5
推荐指数
2
解决办法
1790
查看次数

Clojure地图最长

我正在尝试编写一个名为Clojure的实用程序函数map-longest(备用名称建议赞赏).此功能将具有以下"签名":

(map-longest fun missing-value-seq c1 & colls)
Run Code Online (Sandbox Code Playgroud)

并且将表现得类似map,除了它将继续处理提供的集合,直到最长的用尽.对于短于最长的集合,当它用完了值时,它将从中获取它们missing-values-seq.它应该是懒惰的,但显然不能与无限集合一起使用.

使用示例:

(print (apply str
  (map-longest #(str %1 \space %2 \space %3 \newline) (repeatedly "--")
    ["a1" "a2" "a3"] ["b1" "b2"] ["c1" "c2" "c3" "c4"])))
Run Code Online (Sandbox Code Playgroud)

应该产生以下输出:

a1 b1 c1
a2 b2 c2
a3 -- c3
-- -- c4
Run Code Online (Sandbox Code Playgroud)

但我可能有错误的电话.

我该如何实现?clojure.core或clojure-contrib库是否已经有类似的东西?作为替代方案missing-value-seq,传递第二个函数来生成缺失值会更好#(identity "--")吗(例如:在我的例子中)?

使用案例:我正在编写一个小文本蜘蛛纸牌播放器作为学习Clojure /函数式编程的练习.我需要能够显示游戏tableaus(纯粹主义者的表格:-)).

clojure map

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

Clojure的演员

我正在Scala中编写一个包含"文件复制"actor的实用程序.我发送要复制的文件名,并且演员一次执行一个.

我如何使用代理在Clojure中做同样的事情?

clojure actor

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

Scala错误编译OptionBuilder

我正在使用Apache commons cli(1.2)进行命令行解析.

我的代码中有以下内容:

import org.apache.commons.cli.OptionBuilder
OptionBuilder.withLongOpt("db-host").hasArg.
withDescription("Name of the database host").create('h')
Run Code Online (Sandbox Code Playgroud)

我收到了错误hasArg is not a member of org.apache.commons.cli.OptionBuilder.这没有什么区别,如果我改变.hasArg.hasArg().

为什么?

BTW,Java解析这个问题.

parsing scala apache-commons-cli

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

Clojure没有捕获NumberFormatException

在下面的代码中,Clojure(1.2)正在打印错误的消息:

(try
  (let [value "1,a"]
    (map #(Integer/parseInt %) (.split value ",")))
  (catch NumberFormatException _ (println "illegal argument")))
Run Code Online (Sandbox Code Playgroud)

这应该打印"非法参数",而是打印出来(1#<NumberFormatException java.lang.NumberFormatException: For input string: "a">.

我究竟做错了什么?

这是因为返回的懒惰序列map?怎么写?

clojure numberformatexception

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

模拟Clojure协议

可以使用像EasyMockMockito这样流行的Java 模拟框架来模拟用Clojure协议定义defprotocol吗?如果是这样,怎么样?

easymock clojure mocking mockito

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

Scala选项[(A,B)]模式匹配

我正在编写Java代码生成器.

我有一个不可变的Map,它包含从java.sql.Types[Int]到(String, String)第一个值为Java类型的元组的映射,第二个是Java包,如果默认情况下未导入该类型,则从该包导入该类型(java.lang):

val SqlTypesToJavaTypeNames =
    Map(Types.BIGINT -> ("Long", None),
        Types.BINARY -> ("byte[]", None),
        Types.BIT -> ("Boolean", None),
        Types.BOOLEAN -> ("Boolean", None),
        Types.CHAR -> ("String", None),
        Types.DATE -> ("Date", Some("java.sql.Date")),
        Types.DECIMAL -> ("BigDecimal", Some("java.math.BigDecimal")),
        Types.DOUBLE -> ("Double", None),
        Types.FLOAT -> ("Float", None),
        Types.INTEGER -> ("Integer", None),
        Types.LONGNVARCHAR -> ("String", None),
        Types.LONGVARCHAR -> ("String", None),
        Types.NCHAR -> ("String", None),
        Types.NUMERIC -> ("BigDecimal", None),
        Types.NVARCHAR -> ("String", None),
        Types.REAL -> ("Float", None),
        Types.SMALLINT -> ("Short", None), …
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching scala-option

5
推荐指数
2
解决办法
1503
查看次数

微基准比较Scala可变,不可变集合与java.util.concurrent.*集合

java.util.concurrent在多线程环境中是否有任何已发布的微基准测试将Scala可变和不可变集合与其他集合进行比较?我特别感兴趣的是读者远远超过编写者,比如在服务器端代码中缓存HashMaps.

Clojure集合的微观基准也是可以接受的,因为它们的算法类似于Scala 2.8持久集合中使用的算法.

如果没有做过,我会写自己的,但写好的微基准并不是微不足道的.

collections scala immutability microbenchmark

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