标签: clojureclr

发现lisp-family语言.NET实现

所以基本上我不是在这里比较Scheme和Clojure,我想比较一下实现.有:

Clojure-clr,即使使用Visual Studio扩展也可以安装,但我仍然有点用这种方式使用它.创建并保存此类项目后,无法再次打开它...

而IronScheme,就我所知,还没有针对IronScheme的VS插件,但也许它得到了更好的.NET支持,我从未使用它,也无法了解它.

那么这两个(或者甚至还有其他类似lisp语法的东西)得到了更好的CLR支持?

.net clr scheme ironscheme clojureclr

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

Clojure CLR - 实现包含属性的接口

我正在尝试实现一个具有属性的界面,但似乎无法让它工作,我还没有通过谷歌找到任何相关的例子(还).我确定我在这里做了一些完全错误但却不知道如何解决它.

(System.Reflection.Assembly/LoadWithPartialName "System.Web")

; naive, just trying to figure out how to implement the IHttpHandler interface in Clojure 
(defn foo-handler []
    (reify System.Web.IHttpHandler
        (IsReusable [] false)
        (ProcessRequest [context] ())))
Run Code Online (Sandbox Code Playgroud)

IsReusable是一个属性,我不知道如何告诉reify它不是一个传统的功能.

CompilerException clojure.lang.CljCompiler.Ast.ParseException: Must supply at least one argument for 'this' in: IsReusable
Run Code Online (Sandbox Code Playgroud)

好的,我为IsReusable提供'this'

CompilerException clojure.lang.CljCompiler.Ast.ParseException: Can't define method not in interfaces: IsReusable
Run Code Online (Sandbox Code Playgroud)

我也试过代理,但我得到了类似的结果.

我也尝试将IsReusable命名为get_IsReusable,这实际上没有什么区别,我得到的编译错误与上面相同.

我也试过deftype但是我得到了一个完全不同的错误:

(deftype foo-handler []
  System.Web.IHttpHandler
  (get_IsReusable [this] false)
  (ProcessRequest [this context] ()))
Run Code Online (Sandbox Code Playgroud)

编译错误:

InvalidCastException Unable to cast object of type 'clojure.lang.Var' to type 'System.Type'.  clojure.lang.Namespace.ReferenceClass 
Run Code Online (Sandbox Code Playgroud)

更新: …

clojure clojureclr

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

Clojure:替代使用互斥锁/锁和计数器

场景:我有一台服务器正在监听六个活动的TCP/IP连接.当"就绪"消息进入时,将在其自己的线程上引发事件.当服务器从每个连接收到"就绪"消息时,它需要运行"启动"功能.

我面向对象的解决方案可能涉及使用互斥锁和计数器.就像是:

int _countDown= 6;
object _lock;
void ReadyMessageReceivedForTheFirstTimeFromAConnection() {
    lock(_lock) {
      --_countDown; // 
       if (_countDown==0) Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果不诉诸锁/互斥锁,怎么能在Clojure中解决这个问题呢?

networking clojure clojureclr

4
推荐指数
2
解决办法
499
查看次数

reify,ToString

可能很明显,但是给出了这段代码(来自http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/reify):

(defn reify-str []
  (let [f "foo"]
    (reify Object
      (ToString [this] f))))

(defn -main [& args]
  (println (reify-str))
  (System.Console/ReadLine))
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个输出?

#<ui$reify_str$reify__4722__4727 foo>
Run Code Online (Sandbox Code Playgroud)

代替:

foo
Run Code Online (Sandbox Code Playgroud)

我在Windows中运行ClojureCLR,如果有帮助的话.谢谢!

clojure clojureclr

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

标签 统计

clojureclr ×4

clojure ×3

.net ×1

clr ×1

ironscheme ×1

networking ×1

scheme ×1