SORU
4 Mayıs 2011, ÇARŞAMBA


@@Değişken Ruby ne demek?

Ruby değişken işaretler at çift (@@) ile öncesinde nelerdir? Bir değişken işareti ile öncesinde benim anlayış bir örnek değişken, PHP: böyle olmasıdır

PHP sürümü

class Person {

    public $name;

    public function setName($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

Ruby eşdeğer

class Person

    def set_name(name)
        @name = name
    end

    def get_name()
        @name
    end
end

Çift işareti @@ ve nasıl işareti bir tek farklılık gösteriyor mu? ne demek

CEVAP
4 Mayıs 2011, ÇARŞAMBA


Bir değişken @ ile önekiörnek değişkenbir @@ bir öneki isesınıf değişkeni. Aşağıdaki örneğe bakın; çıkış puts satır sonunda: yorum

class Test
  @@shared = 1

  def value
    @@shared
  end

  def value=(value)
    @@shared = value
  end
end

class AnotherTest < Test; end

t = Test.new
puts "t.value is #{t.value}" # 1
t.value = 2
puts "t.value is #{t.value}" # 2

x = Test.new
puts "x.value is #{x.value}" # 2

a = AnotherTest.new
puts "a.value is #{a.value}" # 2
a.value = 3
puts "a.value is #{a.value}" # 3
puts "t.value is #{t.value}" # 3
puts "x.value is #{x.value}" # 3

Gördüğünüz gibi bu @@shared paylaşılan arasındaki sınıflar; ayar değer bir örnek, bir değişiklik değeri tüm diğer örnekleri bu sınıf ve alt sınıflar bile, bir değişken adında @shared @, olmaz.

[Güncelleme]

Phrogz yorum bahseder gibi, Ruby ortak bir dil örnek değişkeni ile sınıf düzeyi verileri izlemek içinsınıfın kendisi. Bu aklını karıştıran aldatıcı bir konu olabilir, ve konu ile ilgili additional reading bol, ama Class Sınıf değiştirme olarak düşün amasadeceçalıştığınız Class sınıf örneği. Bir örnek:

class Polygon
  class << self
    attr_accessor :sides
  end
end

class Triangle < Polygon
  @sides = 3
end

class Rectangle < Polygon
  @sides = 4
end

class Square < Rectangle
end

class Hexagon < Polygon
  @sides = 6
end

puts "Triangle.sides:  #{Triangle.sides.inspect}"  # 3
puts "Rectangle.sides: #{Rectangle.sides.inspect}" # 4
puts "Square.sides:    #{Square.sides.inspect}"    # nil
puts "Hexagon.sides:   #{Hexagon.sides.inspect}"   # 6

Bu beklediğiniz gibi 100% davranabilir göstermek için Square nil çıkışları olan ben dahil; article I linked above konuyla ilgili ayrıntılı bilgi var.

Çoğu veri ile, dmarkow yorum başına ** 22, bir sınıf değişkenleri ile son derece dikkatli olması gerektiğini de unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012
  • NPR

    NPR

    22 NİSAN 2006