小编Son*_*oth的帖子

如何让Lein与JFreeChart和Dejcartes合作?

我试图了解如何使用lein与clojure,并让它下载Win7 x64上正确的.jar文件.作为一个具体的例子,我正在尝试使用JFreeChart和Dejcartes.

我的问题是通用的,不是JfreeChart特有的.我从根本上不明白如何缩小看到使用某个特定包的示例与通过lein为我提供该包之间的差距.希望有人能够以适用于其他包的方式回答.

请参阅此链接:https://github.com/markmfredrickson/dejcartes/blob/master/Readme.txt 我的project.clj是这样的(这篇文章的一个或另外两行注释掉了).

(defproject monty "1.0.0-SNAPSHOT"
  :description "Monty Game Challenge"
  :dependencies [[org.clojure/clojure "1.2.1"]
                 [org.clojure/clojure-contrib "1.2.0"]
                ;[org.jfree/chart "1.0.13"]])
                 [com.markmfredrickson/dejcartes "1.0.0"]])
Run Code Online (Sandbox Code Playgroud)
  1. 我看到(import '(org.jfree.chart chartframe))在Dejcartes readme.txt中使用过,所以我认为这意味着我需要JFreeChart的.jar文件,对吧?

    我把[org.jfree/chart "1.0.13"]我的project.clj 放进去,但lein deps抱怨如下:

    C:\Users\me\code\Clojure\monty>lein deps
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.pom from central
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.pom from clojure
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.pom from clojars
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.pom from central
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.jar from central
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.jar from clojure
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.jar from clojars
    Downloading: org/jfree/chart/1.0.13/chart-1.0.13.jar from central
    An error has occurred while processing the Maven …
    Run Code Online (Sandbox Code Playgroud)

dependencies clojure jfreechart leiningen

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

如何覆盖引用类型的println行为

我有一个使用dosync和创建的循环图ref-set.当我传递给println我时,我得到了一个java.lang.StackOverflowError我所期望的,因为它有效地试图打印一个无限嵌套的结构.

我发现,如果我这样做(str my-ref)会产生看起来像vertex@23f7d873并且实际上并不试图遍历结构并将所有东西都打印出来的东西,所以这就解决了这个问题,但是只有在我非常小心我的情况时才会有所帮助. m打印到屏幕上.我希望能够打电话给(println my-graph)它打印ref作为某种类型的自定义文本(可能涉及str),以及其他非ref的东西通常.

目前我有一个自定义打印功能,可以自己打印结构的每个元素,并完全跳过打印ref.(事实证明,看着vertex@23f7d873实际上并不是非常有用).使用起来很尴尬,阻碍了在REPL中对东西进行随意检查,同时也阻止了Emacs检查员在swank.core/break调试时查看内容.

一个细节ref实际上是一个值,defstruct其中还包含一些我试图正常打印的其他东西.

所以我想知道我应该走哪条路.我看到这些选项:

  1. 弄清楚extend-type并将CharSequence协议应用于我的defstructed结构,以便在遇到ref它时可以正常工作.这仍然需要对结构进行逐个字段检查,并且需要特殊情况ref,但至少它将问题本地化为结构而不是包含结构的任何内容.
  2. 弄清楚如何CharSequence在遇到协议时覆盖协议ref.这允许更加本地化的行为,并允许我在REPL处查看循环引用,即使它不在结构体内.这是我的首选.
  3. 弄清楚如何做toString我认为在某种程度上被称为某种程度的事情println.我对这个选项最无知.对其他人一无所知,但我一直在读书Joy of Clojure,现在我受到了启发.

同样,此解决方案应该适用于printpprint尝试打印循环引用时通常会禁用的任何其他内容.我应该采用什么策略?

非常感谢任何输入.

graph clojure cyclic charsequence pprint

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

^ M字符显示在clojure slime-repl

(println...)我的代码中的每一个都导致在REPL中出现终止的^ M字符.我lein swank在一个单独的窗口中运行,我通过连接M-x slime-connect

我认为这可能与Emacs在进程缓冲区中显示^ M的问题相同,但我还没有尝试过该修复程序.

我已经尝试将行尾样式改为unix/dos/mac,并遵循我在网上找到的其他一些处方,但我认为其中大部分与实际替换文件中的^ M有关.或者在缓冲区中,或写一些我认为可能有点过分的elisp.这真的应该是某个地方的复选框,如果不是字面上至少在概念上.

我在Win7 x64上使用Emacs 24 + clojure模式+ slime + swank.

emacs termination clojure slime

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

Clojure:resolve和var之间有什么区别?

(resolve...)和之间有什么区别(var...)?它们都采用符号并返回命名空间中的var.看起来resolve是一个将引用语法作为参数的函数,var是一个特殊的形式,它采用在repl中输入的文字符号,但我不明白这些将如何以不同的方式使用.

user> (def my-symbol 2.71828182846)
#'user/my-symbol
user> (resolve 'my-symbol)
#'user/my-symbol
user> (type (resolve 'my-symbol))
clojure.lang.Var
user> (var my-symbol)
#'user/my-symbol
user> (type (var my-symbol))
clojure.lang.Var
user> (= (resolve 'my-symbol) (var my-symbol))
true
Run Code Online (Sandbox Code Playgroud)

symbols var clojure

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

如何使Emacs文本像Netbeans一样清晰呈现

我的设置:Microsoft Surface Pro(版本1),Windows 8.1,Netbeans 8.0,Emacs 24

我注意到,对于任何给定的字体,在这种情况下Consolas 14,Netbeans文本大小不仅更小,而且在显示器上超级清晰.在Emacs上,Consolas 14是巨大的,有点模糊.在其他程序中,文本也不像Netbeans那样清晰.我知道有子像素的东西正在进行明文,抖动等.

那么Netbeans在做什么,特别是看起来很棒?我可以让Emacs看起来一样吗?为什么文本的大小与14的pt大小相同?如何在我的程序中看到这样的文本(在JVM上假设)?

在由Surface Pro驱动的常规LCD显示器上,Netbeans文本看起来不那么清晰,但尺寸差异仍然存在,因此我认为这是一个质量稍低的显示器.

emacs text rendering jvm netbeans

4
推荐指数
1
解决办法
2098
查看次数

如何在Clojure中获得参数名称?

我想从函数中获取函数外部定义的var的名称.该名称应该是我在原始定义范围内使用的名称,而不是我实际上尝试使用该名称的任何嵌套绑定.

所以我想做一些像(学术范例)的事情:

(defn f1 [x1] (println "hello, you passed var name >>" (get-var-name x1) "<<")
(defn f2 [x2] (f1 x2))
(defn f3 [x3] (let [zzz x3] (f2 zzz))
(def my-var 3.1414926)
(f3 my-var)
user> hello, you passed var name >>my-var<<
Run Code Online (Sandbox Code Playgroud)

我能够根据我发现的一些东西做这个宏:

(defmacro get-var-name [x]
  `(:name (meta (var ~x))))
Run Code Online (Sandbox Code Playgroud)

这在例如从REPL调用时起作用,但是当从"内部"范围调用时编译器会阻塞,例如

(defn another-func [y]
  (get-var-name y))
Run Code Online (Sandbox Code Playgroud)

编译器说"说无法解决var y". (macroexpand...)显示它试图在当前命名空间中找到局部变量y,而不是当前命名空间中的原始变量.我认为(var...)只查找命名空间变量,因此这可以防止宏在函数或其他绑定中工作let.

我不得不从我定义变量的相同范围手动获取变量名称并将其作为额外参数传递.有没有更优雅的方法通过一系列绑定将var名称信息传递到它所使用的点?那将是坏事.

谢谢

macros var clojure

3
推荐指数
1
解决办法
1272
查看次数

只要建立连接,Python TCP socket.recv()就不会返回任何内容

我正在尝试实现最基本的python TCP服务器.Windows 8,Python 2.7,防火墙已关闭.代码来自这里:https://wiki.python.org/moin/TcpCommunication

如果我socket(...), connect(...), send(...)通过python repl 做客户端stuff(),一切正常,即服务器在调用时正确阻塞recv.

但是,如果我通过python脚本运行完全相同的代码(无论是否在Windows命令行显式调用python.exe),recv立即返回没有数据.我在其他地方读到SO这意味着它是一个无效的套接字,但我不确定这意味着什么或如何检查它.我使用的是accept()不是用于启动连接的套接字返回的套接字.

我试图阻止,recv所以我可以利用超时(我不想使用选择模块,BTW也立即返回)并在尝试之间处理一些键盘recv,即用户按'q'退出.

在各种实验中,我已经证明,一旦发生这种情况,如果我把它放在一个循环中,recv它将永远立即返回(如同select.select(...)),所以它不像客户端最初发送一个"坏"数据包.如果客户端碰巧发送了一些东西,那么recv返回该数据,但它肯定不会阻塞等待数据时放入紧密循环.

这种行为有望吗?

服务器代码:

import sys
import socket


TCP_IP = '192.168.1.10'
TCP_PORT = 5005
BUFFER_SIZE = 20  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE) # This returns immediately …
Run Code Online (Sandbox Code Playgroud)

python sockets client tcp

2
推荐指数
1
解决办法
1万
查看次数

JavaFX beans 与属性——为什么两者都是?

我正在查看http://docs.oracle.com/javase/8/javafx/api/javafx/beans/property/SimpleObjectProperty.html,我有点困惑。

SimpleObjectProperty我可以使用第三个构造函数创建一个,

SimpleObjectProperty(Object bean, String name, T initialValue) 
Run Code Online (Sandbox Code Playgroud)

在 Clojure 中如下:(def sop (SimpleObjectProperty. 5 "mysop" 6))

这将创建一个SimpleObjectPropertyBean value = 5(类型为java.lang.Long)和非 Bean value = 6(类型为 )的 Bean (java.lang.Long)

为什么有两个不同的“价值观”?在这种情况下,“Bean”的用途是什么?我应该使用哪一个?我正在尝试封装一个可以在其上设置侦听器的通用 Clojure 对象,因此我认为它要么是这个,要么ObjectPropertyBase是层次结构中的一个并且可以直接实例化。

我一直在慢慢地学习 Java,以了解如何在 Clojure 中使用 JavaFX,但这一个令人困惑。

谢谢!:)

java javafx clojure javabeans

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