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

  • bmarian22

    bmarian22

    22 Aralık 2007
  • bobono1baby

    bobono1baby

    14 AĞUSTOS 2011
  • Liam Underwood

    Liam Underwo

    19 Mayıs 2009