SORU
26 Temmuz 2010, PAZARTESİ


Clojure - adlandırılmış bağımsız değişkenleri

Clojure adlandırılmış bağımsız değişkenleri var mı? Eğer öyleyse, küçük bir örnek verebilir misiniz?

CEVAP
26 Temmuz 2010, PAZARTESİ


Clojure 1.2, haritasını destructure gibi rest bağımsız destructure. Bu non-konumsal anahtar kelime argümanlar adlı yapabileceğin anlamına gelir. İşte bir örnek:

user> (defn blah [& {:keys [key1 key2 key3]}] (str key1 key2 key3))
#'user/blah
user> (blah :key1 "Hai" :key2 " there" :key3 10)
"Hai there10"
user> (blah :key1 "Hai" :key2 " there")
"Hai there"
user> (defn blah [& {:keys [key1 key2 key3] :as everything}] everything)
#'user/blah
user> (blah :key1 "Hai" :key2 " there")
{:key2 " there", :key1 "Hai"}

Hiçbir şeyClojure haritası yukarıda gösterildiği gibi bir işlevin bağımsız değişken listesinde yapılabilir destructuring süre yapabilirsiniz. Kullanma da dahil olmak üzere :ya bu gibi argümanlar için varsayılan tanımlamak için:

user> (defn blah [& {:keys [key1 key2 key3] :or {key3 10}}] (str key1 key2 key3))
#'user/blah
user> (blah :key1 "Hai" :key2 " there")
"Hai there10"

Ama bu Clojure 1.2. Alternatif olarak, eski sürümleri, aynı şeyi taklit etmek için bunu yapabilirsiniz:

user> (defn blah [& rest] (let [{:keys [key1 key2 key3] :or {key3 10}} (apply hash-map rest)] (str key1 key2 key3)))
#'user/blah
user> (blah :key1 "Hai" :key2 " there")
"Hai there10"

ve aynı şekilde çalışır genelde.

Ve ayrıca anahtar kelime argümanlar önce gelen konumsal bağımsız değişkenler olabilir:

user> (defn blah [x y & {:keys [key1 key2 key3] :or {key3 10}}] (str x y key1 key2 key3))
#'user/blah
user> (blah "x" "Y" :key1 "Hai" :key2 " there")
"xYHai there10"

Bu isteğe bağlı değildir ve sağlanacak.

Aslında toplama Clojure herhangi gibi rest bağımsız destructure.

user> (defn blah [& [one two & more]] (str one two "and the rest: " more))
#'user/blah
user> (blah 1 2 "ressssssst")
"12and the rest: (\"ressssssst\")"

Hatta Clojure 1.1 bu tür bir şey yapabilirsin. Anahtar kelime argümanlar tarzı göster destructuring sadece 1.2 de olsa geldi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BachelorsPadTv

    BachelorsPad

    17 Ocak 2012
  • ethr95awd

    ethr95awd

    8 Kasım 2006
  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009