Skip to content

Instantly share code, notes, and snippets.

@qertoip
Created August 1, 2010 06:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qertoip/503008 to your computer and use it in GitHub Desktop.
Save qertoip/503008 to your computer and use it in GitHub Desktop.
; Definicja przestrzeni nazw z importem funkcji Clojura i klas Javy
(ns qertoip
(:use
[clojure.contrib.io :only [to-byte-array]]
[clojure.contrib.java-utils :only [as-file]])
(:import
[java.io File FileOutputStream]))
; W poniższy sposób można zaimportować *.clj lub *.class wymienione z nazwy,
; znajdujące się w CLASSPATH. Nie można zaimportować całego pakietu.
(use '[lib-name :only (var-names+)])
; odpowiednik w ruby:
; compositions.select{|c| c.name == "Requiem" }.map( &:composer )
(for [c compositions :when (= "Requiem" (:name c))] (:composer c))
; Jak wołać metody obiektu?
(.metodaObiektu obiekt)
; Jak utworzyć obiekt Javy?
(new Thread
(fn [] ())
)
; W clojure nie ma klas znanych z programowania obiektowego.
; Najbliższym odpowiednikiem jest struktura z polami, coś jak struct w C.
(defstruct person :first-name :last-name)
(struct person "Piotr" "Wlodarek")
; lub
(struct-map person :first-name "Piotr", :last-name "Wlodarek")
; odpowiednik_switch_case.clj
; cond to macro, zwróci nil jeśli żaden z warunków nie był spełniony
(cond
(< x 10) "less"
(> x 10) "more"
)
; Jak wczytać plik clj do REPL-a? Jeśli nie ma przestrzeni nazw,
; wystarczy load lub load-file
(load-file "./temp.clj") ; z zadanej ścieżki
(load "temp") ; z CLASSPATH
; Jak idiomatycznie wołać statyczne metody Javy?
(Character/isWhitespace 32)
(use '[clojure.contrib.str-utils :only (str-join)])
(str-join "-" ["ala" "ma" "kota"])
(defstruct account :id :balance)
(def accounts
(ref #{})
)
(dosync ; force transaction
(alter accounts conj
(struct account 1 139.78)
)
)
@qertoip
Copy link
Author

qertoip commented Aug 2, 2010

Najbardziej praktyczne fragmenty kodu z początku książki "Programming Clojure"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment