Skip to content

vsubhuman/clj-interop

Repository files navigation

Clojure!

whaka-clj-interop

Clojure interoperability tool. An API to usabilitilize (Is it a word? We can make it one! We have the technology!) working with Java-Clojure interop.

Examples

com.vsubhuman.clj.CljCore

Functions require and deref are available statically in this class:

CljCore.require("my.namespace");

Object strVar = Clojure.var("my.namespace", "my-str-var");
Object longVar = Clojure.var("my.namespace", "my-long-var");

String strValue = CljCore.deref(strVar);
Long longValue = CljCore.deref(longVar);

(!) Note: that method deref provides weak generics that allow you to assign result to any type, but you will get ClassCastException in case the type is incompatible.

com.vsubhuman.clj.UberClj

Loading vars and then dereferencing them is quite tedious, so of course there's a better way:

CljCore.require("my.namespace");
String str = (String) UberClj.var("my.namespace", "my-str-var").deref();

Method UberClj.var casts its result to clojure.lang.Var, so you can access its methods directly. But it's still not pretty enough, so you may do the same thing like this:

CljCore.require("my.namespace");
String str = UberClj.value("my.namespace", "my-str-var");

When you want to acquire a function, you may do it like this:

CljCore.require("my.namespace");
IFn fn = UberClj.fn("my.namespace", "my-fn");

Functions are values in clojure, so you could do the same thing with value method, but fn seems more readable in this case, and it's also automatically casts result to clojure.lang.IFn:

CljCore.require("my.namespace");
String result = UberClj.fn("my.namespace", "my-fn").invoke(42);
// vs:
String result2 = UberClj.<IFn>value("my.namespace", "my-fn").invoke(42);

Tho, there's already a much better way to call a function:

CljCore.require("my.namespace");
String result = UberClj.call("my.namespace", "my-fn", 42);
Long sum = UberClj.call("clojure.core", "+", 10, 20, 30);

Kanban

https://waffle.io/vantuz-subhuman/clj-interop/join

CI

https://travis-ci.org/vantuz-subhuman/clj-interop/pull_requests

Clojure ki te mate!

Whaka!