SORU
6 EKİM 2009, Salı


İzin vs Clojure Bağlama

*compile-path* ayarlanması için çalışır, çünkü onların farklı ve biri olmadığını anlıyorum. Ancak, farklı.) o yüzden yardıma ihtiyacım var.

let verilen bağlar ile yeni bir kapsam oluşturur, ama 7**...?

CEVAP
6 EKİM 2009, Salı


let lexically bazı değeri değişmez diğer kapsamlı oluşturur. binding dinamik Var bazıları için bağlayıcı kapsamı oluşturur.

Dinamik bağlama binding form içindeki Kodu ve kod çağıran herhangi bir kod yerel sözlü kapsamda olmasa bile) yeni bağlama göreceği anlamına gelir.

Verilen:

user> (def ^:dynamic x 0)
#'user/x

binding aslında bir dinamik Var let sadece bir gölgeler için yerel bir takma ad ile var bağlama oluşturur:

user> (binding [x 1] (var-get #'x))
1
user> (let [x 1] (var-get #'x))
0

binding nitelikli adları kullanabilir Vars üzerinde çalışır beri) let değil

user> (binding [user/x 1] (var-get #'x))
1
user> (let [user/x 1] (var-get #'x))
; Evaluation aborted.
;; Can't let qualified name: user/x

let-tanıttı bağlantıları kesilebilir. binding-tanıttı bağlantıları olan iş parçacığı yerel değişken:

user> (binding [x 1] (set! x 2) x)
2
user> (let [x 1] (set! x 2) x)
; Evaluation aborted.
;; Invalid assignment target

Sözlü-dinamik etmektedir

user> (defn foo [] (println x))
#'user/foo
user> (binding [x 1] (foo))
1
nil
user> (let [x 1] (foo))
0
nil

Ayrıca 25*, let*bakın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Floortile83

    Floortile83

    16 Ocak 2010
  • Perihelion

    Perihelion

    23 NİSAN 2008
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009