İzin vs Clojure Bağlama | Netgez.com
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

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • knopik96

    knopik96

    7 Mayıs 2011
  • SomeOne Pro

    SomeOne Pro

    25 EKÄ°M 2013