Clojure函数名首尾为何带点?解析Java互操作代码中的点语法疑问
为什么部分Clojure函数的名称开头或末尾带有圆点?
这其实是Clojure为Java互操作量身设计的语法糖,咱们拆开你例子里的两个点来解释:
1. java.text.SimpleDateFormat. 末尾的圆点
这个点是Clojure里调用Java类构造方法的简写,用来替代Java里的new关键字。你写的:
(java.text.SimpleDateFormat. "yyyy-MM-dd")
完全等价于:
(new java.text.SimpleDateFormat "yyyy-MM-dd")
末尾加个点,就是告诉Clojure:“我要创建这个Java类的实例,后面跟着构造参数”,写法更贴合Clojure的函数式风格,不用额外的new关键字。
2. .parse 开头的圆点
这个点是用来标记调用Java对象的实例方法。Clojure里调用Java实例方法的标准格式是:
(.实例方法名 Java对象 参数...)
你例子里的:
(.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") date)
意思就是:先创建一个SimpleDateFormat实例,然后调用这个实例的parse方法,把date作为参数传进去。开头的点是Clojure用来区分“Java实例方法”和普通Clojure函数的标识——毕竟Clojure自己的函数调用是不用加这个点的。
简单来说,这两个圆点都是为了让Clojure和Java的交互更顺畅、写法更简洁,不用在Lisp风格的代码里硬塞Java的语法元素~
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

