SORU
15 Temmuz 2011, Cuma


Dinamik sürekli atama

class MyClass
  def mymethod
    MYCONSTANT = "blah"
  end
end

bana hata veriyor:

SyntaxError: dinamik sürekli atama hatası

Neden bu dinamik sürekli olarak kabul edilir? Sadece bir dize atıyorum.

CEVAP
15 Temmuz 2011, Cuma


Senin sorunun her zaman sürekli yeni bir değer atama yöntem ve çalıştırın. Bu sabit olmayan sürekli yapar; olsa bile izin verilmeziçindekilerdize aynı (şimdilik) her neyse, gerçek bir dizenesneher zaman bu yöntemi çağrılır farklı kendisidir. Örneğin:

def foo
  p "bar".object_id
end

foo #=> 15779172
foo #=> 15779112

Belki de sizin kullanım örneği—neden açıkladın yöntem—biz daha iyi bir uygulama ile size yardımcı olabilecek bir sabit değeri değiştirmek istiyorum.

Belki de oldukça sınıfı örnek bir değişken var mı?

class MyClass
  class << self
    attr_accessor :my_constant
  end
  def my_method
    self.class.my_constant = "blah"
  end
end

p MyClass.my_constant #=> nil
MyClass.new.my_method

p MyClass.my_constant #=> "blah"

Eğergerçektendeğiştirmek mi istiyorsun değeri sabit bir yöntem, ve sabit bir Dize veya bir Dizi, 'hile' ve kullanın #replace yöntem için neden bu nesne için yeni bir değer olmadan aslında değişen nesne:

class MyClass
  BAR = "blah"
  def cheat( new_bar )
    BAR.replace new_bar
  end
end

p MyClass::BAR           #=> "blah"
MyClass.new.cheat "whee"
p MyClass::BAR           #=> "whee"

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • After Effects Tutorials w/ Mikey

    After Effect

    24 HAZİRAN 2009
  • placeboing

    placeboing

    7 Mart 2006
  • Shon Gonzales

    Shon Gonzale

    5 EKİM 2014