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

  • chrmoe

    chrmoe

    7 Kasım 2006
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011