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

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010
  • Moodle

    Moodle

    11 Mayıs 2010