我试图了解如何使用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)
我看到(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)我有一个使用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其中还包含一些我试图正常打印的其他东西.
所以我想知道我应该走哪条路.我看到这些选项:
extend-type并将CharSequence协议应用于我的defstructed结构,以便在遇到ref它时可以正常工作.这仍然需要对结构进行逐个字段检查,并且需要特殊情况ref,但至少它将问题本地化为结构而不是包含结构的任何内容.CharSequence在遇到协议时覆盖协议ref.这允许更加本地化的行为,并允许我在REPL处查看循环引用,即使它不在结构体内.这是我的首选.toString我认为在某种程度上被称为某种程度的事情println.我对这个选项最无知.对其他人一无所知,但我一直在读书Joy of Clojure,现在我受到了启发.同样,此解决方案应该适用于print和pprint尝试打印循环引用时通常会禁用的任何其他内容.我应该采用什么策略?
非常感谢任何输入.
(println...)我的代码中的每一个都导致在REPL中出现终止的^ M字符.我lein swank在一个单独的窗口中运行,我通过连接M-x slime-connect
我认为这可能与Emacs在进程缓冲区中显示^ M的问题相同,但我还没有尝试过该修复程序.
我已经尝试将行尾样式改为unix/dos/mac,并遵循我在网上找到的其他一些处方,但我认为其中大部分与实际替换文件中的^ M有关.或者在缓冲区中,或写一些我认为可能有点过分的elisp.这真的应该是某个地方的复选框,如果不是字面上至少在概念上.
我在Win7 x64上使用Emacs 24 + clojure模式+ slime + swank.
(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) 我的设置: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文本看起来不那么清晰,但尺寸差异仍然存在,因此我认为这是一个质量稍低的显示器.
我想从函数中获取函数外部定义的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名称信息传递到它所使用的点?那将是坏事.
谢谢
我正在尝试实现最基本的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) 我正在查看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,但这一个令人困惑。
谢谢!:)