小编Ray*_*yne的帖子

Clojure"如果"从未评估其第三个论点

我一直想把这个问题想象一下.

(defn is-decimal [astr]
  (if (. astr (indexOf (int \.)))
    (Double/parseDouble astr)
    (Integer/parseInt astr)))
Run Code Online (Sandbox Code Playgroud)

这就是我写的功能.is-decimal或者传递诸如"2.5"或"5"之类的东西或类似的东西,但它总是使用if第二个参数,而不是第三个参数.我(. astr (indexOf (int \.)))在REPL中测试过,它看起来工作正常,它在失败时返回-1,而在它失败时返回1.我相信这可能是问题所在.-1在Clojure中并不意味着错误.谁能想到解决这个问题的方法?

提前致谢.

编辑:谢谢你的帮助.在我写完之后,我有了一个主意.我编写了一个检查1和-1的谓词函数.正是我需要的.醒来后我不应该直接编码:

clojure

7
推荐指数
2
解决办法
1268
查看次数

从Clojure调用Java

当我尝试在Clojure中运行以下代码(来自REPL)时:

(dotimes [i 5]
  (.start
   (Thread.
    (fn []
      (Thread/sleep (rand 1000))
      (println (format "Finished %d on %s" i (Thread/currentThread)))))))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

java.lang.Exception: Unable to resolve symbol: i in this context
clojure.lang.Compiler$CompilerException: NO_SOURCE_FILE:6: Unable to resolve symbol: i in this context
        at clojure.lang.Compiler.analyze(Compiler.java:3713)
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

java clojure language-interoperability

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

什么是/ lib中通常用于Ruby项目的<appname> .rb文件?

参考这个问题:理想的ruby项目结构我注意到appname.rb在lib中,并且是顶级的.

我正在阅读Github上的一些Rake源代码,我注意到他们的项目结构几乎相同.他们在/ lib中有一个顶级的"rake.rb"文件,但我不确定它的用途.

在Pickaxe(Ruby 1.9编程)中,他们展示了一个构建一个小项目的例子,上面的目录结构几乎相同,但没有提到/ lib中顶级.rb的用法.

所以,我的问题是:这个东西在Ruby项目中通常用于什么?

对不起,如果这是一个愚蠢的问题,我确信它是,但我对Ruby相对较新.我现在不太了解Ruby-foo.;)

谢谢.

ruby structure

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

关于面向对象设计的问题用Ruby

我正在考虑用Ruby编写一个CLI Monopoly游戏.这将是我在Ruby中完成的第一个大型项目.我在编程方面的大部分经验都是使用Clojure和Haskell等函数式编程语言.我很了解Object Orientation,但我没有设计面向对象程序的经验.

现在,这是交易.

在大富翁中,董事会周围有很多空间.大多数空间是属性,其他空间做其他事情.

每个空间都有一个班级会很聪明吗?我正在考虑拥有一个所有其他空间继承的Space类,并且具有一个继承自Space的Property类,然后为继承自Property的每个属性创建一个类.这意味着很多课程,这让我相信这是一个糟糕的方式来做我想做的事情.

我还打算做的是使用'继承'钩子方法来跟踪所有属性,以便我可以搜索它们并在需要时将它们从未买单列表中删除.

这类问题似乎出现在很多程序中,所以我的问题是:有没有更好的方法来做到这一点,我是否遗漏了对面向对象设计非常重要的东西?

如果这是一个愚蠢的问题,我很抱歉,对于OOPD,我只是一无所知.

谢谢.

ruby oop

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

一般来说,如何知道Clojure/Lisp中的换行符?

这是一些示例代码:

(deftype Deck52 [suits] :as this
  DeckOfCards
  (check-empty []
               (Deck52. (apply hash-map 
                              (apply concat (remove (-> nil?) 
                                                    (for [[key val] suits] 
                                                      (if (empty? val) nil [key val])))))))
  (remove-card [suit card]
               (assoc suits suit (remove #(= card %) (suit suits))))

  (get-card [suit]
            (let [suitd (suit suits)]
              [(first suitd) (check-empty (Deck52. (assoc suits suit (rest suitd))))]))

  (random-card []
               (let [suitn (+ 1 (rand-int 4))]
                 (cond (= suitn 1) (get-card this :hearts)
                       (= suitn 2) (get-card this :diamonds)
                       (= suitn 3) (get-card this …
Run Code Online (Sandbox Code Playgroud)

coding-style newline clojure

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

从Clojure中的STRING解析命令行参数

我遇到的情况是,我需要解析字符串中的参数,就像在命令行中提供给Java/Clojure应用程序时解析它们一样.

例如,我需要"foo \"bar baz\" 'fooy barish' foo"变成("foo" "bar baz" "fooy barish" "foo").

我很好奇是否有办法使用Java或Clojure用来执行此操作的解析器.我并不反对使用正则表达式,但我对正则表达式感到厌恶,如果我试图为此写一个,我会努力的.

有任何想法吗?

java regex command-line clojure

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

Clojure读线功能问题

我正在尝试在我的Clojure程序中获取控制台输入,但是当它到达程序的那一部分时它给了我这个错误.

Exception in thread "main" java.lang.ClassCastException:
clojure.lang.LineNumberingPushbackReader cannot be cast to java.io.BufferedReader
Run Code Online (Sandbox Code Playgroud)

'read'功能有效,但它不是我需要的.这是我正在使用的代码.

(defn prompt-read [prompt]
  (print (format "%s: " prompt))
  (flush )
  (read-line))
Run Code Online (Sandbox Code Playgroud)

编辑:

这显然只是我正在使用的版本.它是当前的Programming Clojure示例代码中包含的版本,我将测试当前的发行版本并查看是否存在问题.

clojure

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

如何在github存储库中编辑初始提交?

我正在研究一个我分叉的存储库,其中作者采用了脏路径,并在初始提交中将所有依赖项填充到lib /目录中.通常,如果它不是初始提交,我只会做一个交互式rebase并删除整个提交(如果这就是他所做的全部).但是,我不知道如何编辑/删除初始提交.有没有办法可以编辑初始提交并删除lib目录而不触及其余部分?

编辑

我在这里偶然发现了答案:我可以从Git仓库中删除最初的提交吗?在选定的答案中.这就是我没有更彻底地搜索的结果.

git git-rebase

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

什么时候应该在Clojure中使用临时重新绑定-a-special-var成语?

我注意到一些像clojure-twitter这样的库使用特殊的vars(那些用于动态绑定的用星号包围)用于oauth身份验证.您将身份验证保存在var中,然后使用(with-oauth myauth ..).我认为这是解决此类问题的一个非常好的解决方案,因为您可以为应用程序的每个用户重新绑定auth var.

我在一个我写过的电子邮件客户端中采取了类似的路线.我有一个特殊的var命名会话,我使用当前用户的会话和用户信息绑定到一个地图,并且有各种重要的函数使用来自该var的信息.我写了一个宏,with-session暂时在传递给with-session的一组表单的上下文中重新绑定它.事实证明这是一个非常干净的解决方案(对我来说).

所以,我的问题是这样的:我是否'做'它'?这是一个糟糕的设计决定,还是这个特殊变量的预期用法之一?

clojure dynamic-rebinding

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

Java中的isReachable看起来并没有像预期的那样工作

我正在使用Clojure,但我可以阅读Java,所以这不是Clojure特定的问题.这甚至似乎都不适用于Java.

我正在尝试使用isReachable实现一些'ping'功能.我正在使用的代码是这样的:

(.isReachable (java.net.InetAddress/getByName "www.microsoft.com") 5000)
Run Code Online (Sandbox Code Playgroud)

我的一位好朋友翻译成Java:

public class NetTest {
  public static void main (String[] args) throws Exception{
    String host = "acidrayne.net";
    InetAddress a = InetAddress.getByName(host);

    System.out.println(a.isReachable(10000));
  }
}
Run Code Online (Sandbox Code Playgroud)

这两个都返回false.我想我一定是做错了,但谷歌的研究告诉我的不同之处.我很困惑!

java ping clojure inetaddress

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