当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

关于clojure的gen-class

发表于: 2014-05-15   作者:Aaron5   来源:转载   浏览次数:
摘要: 关于gen-class的参数说明: :name aname 要生成的类的全限定名 :extends aclass 指定superclass,没有指定默认为Object :implements [interface ...] 要实现的接口 :init name 指定构造函数名称,必须返回[ [superclass-constructor-args] state] 如
关于gen-class的参数说明:

:name aname
要生成的类的全限定名

:extends aclass
指定superclass,没有指定默认为Object

:implements [interface ...]
要实现的接口

:init name
指定构造函数名称,必须返回[ [superclass-constructor-args] state]
如果没有指定,则args传给superclass,并且state为nil

:constructors {[param-types] [super-param-types], ...}
指定构造参数的类型

:post-init name
init之后执行

:methods [ [name [param-types] return-type], ...]
定义开放的方法,默认为non-private方法,静态方法加^{:static true}。

:main boolean
指定的main方法。名称为(str prefix main)。prefix默认为减号。也可以自己指定prefix。

:factory name
工厂方法

:state name
存放的state的名称,state是ref或者agent类型。(对应于init中的state。必须要配置init)

:exposes {protected-field-name {:get name :set name}, ...}
暴露get,set方法

:exposes-methods {super-method-name exposed-name, ...}
需要暴露哪些方法

:prefix string
前缀,默认为减号。查找方法要以(str prefix fn-name)为准,所以main方法写成-main。可以认为是public的一个标识符。

:impl-ns name
指定实现方法的ns

:load-impl-ns boolean
默认为true,和impl-ns配套使用

一个例子
(ns com.example )

(gen-class
      :name com.example.Demo
      :state state
      :init init
      :prefix "-"
      :main false
      :methods [[setLocation [String] void]
                [getLocation [] String]])

;;构造函数。state值为:(atom {:location "default"})
(defn -init []
  [[] (atom {:location "default"})])

;;保存字段到state中
(defn setfield
  [this key value]
      (swap! (.state this) into {key value}))

;;从state中获取field
(defn getfield
  [this key]
  (@(.state this) key))

(defn -setLocation [this loc]
  (setfield this :location loc))

(defn  -getLocation
  [this]
  (getfield this :location))

;;main入口,可以在lein中配置:main参数,然后执行lein uberjar来打包一个可执行的jar包。
(defn -main [& args]
  (pritnln "Hello,World!"))

;; 编译后,添加到classpath。当成java类来调用、执行。
user=> (def ex (com.example.Demo.))
#'user/ex
user=> (.getLocation ex)
"default"
user=> (.setLocation ex "time")
nil
user=> (.getLocation ex)
"time"

关于clojure的gen-class

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
正在学习 Clojure,为了方便跑demo,把 Clojure RT 抠出来,用 rSyntaxTextarea 组件弄了下语法高亮
《Clojure编程》 基本信息 作者: (美)Chas Emerick(蔡司埃默里克) Brian Carper(布赖恩卡珀) Chris
英文原 getting started with clojure,翻译:开源中国 我将尝试教一些人(主要是Python开发者,在OS
安装IDEA,略过 选择File-Settings-plugins: 3. 选择Browse repositories 4. 找到La Clojure,右键
转载自网址: http://xumingming.sinaapp.com/302/clojure-functional-programming-for-the-jvm-cloj
http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey This presentation shows on
原创,转载请注明。 本文关注怎样在eclipse上搭建基本的Clojure开发环境。本文读者需要有Java的开发
《Clojure程序设计》 基本信息 作者: (美)Stuart Halloway Aaron Bedra [作译者介绍] 出版社:人民
http://clojuredocs.org/, 在线Clojure语法例子 Installing Clojure Clojure is an open-source pro
Clojure入门教程: Clojure – Functional Programming for the JVM中文版 发表于 2011 年 12 月 07
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号