0

私はこのコードを持っています:

class TVShow
    attr_accessor :name
    attr_accessor :tvdbID

    def initialize(showName)
        :name = showName
    end
end

そして、それは私にこのエラーを与えます:

syntax error, unexpected '=', expecting keyword_end
        :name = showName

私がやりたいのは、クラス全体で使用できるパブリック変数を用意することです。それが、:name と :tvdbID でやろうとしていることです。

私はRubyにかなり慣れていないので、これがすべて間違っている場合はお知らせください。

4

2 に答える 2

2

変化する:

 def initialize(showName)
   :name = showName
 end

 def initialize(showName)
   @name = showName
 end

これを行うこともできます:

attr_accessor :name, :tvdbID

いくつかの例:

class Dog
  def initialize(name)
    @name = name
  end

  def show
    puts "I am a Dog named: " + @name
  end

  def add_last_name(last_name)
    @name = @name + " " + last_name
  end

end

d = Dog.new "Fred"
d.show
d.add_last_name("Rover")
d.show

--output:--
I am a Dog named: Fred
I am a Dog named: Fred Rover

したがって、インスタンス変数はクラス内から自由にアクセスできます。ただし、クラスの外部から上記の例のインスタンス変数にアクセスすることはできません。

d = Dog.new "Fred"
puts d.name

--output:--
1.rb:17:in `<main>': undefined method `name' for #<Dog:0x000001010a5b48 @name="Fred"> (NoMethodError)

クラス外からインスタンス変数にアクセスする方法は次のとおりです。

class Dog
  def initialize(name)
    @name = name
  end

  def name  #getter
    @name
  end

  def name=(val)  #setter
    @name = val
  end
end

d = Dog.new "Fred"
puts d.name

--output:--
Fred

これらのゲッターとセッターは入力するのが面倒です-特にインスタンス変数が10個ある場合は--そこでrubyはショートカットを提供します:

class Dog
  def initialize(name, age)
    @name = name
    @age = age
  end

  attr_accessor :name, :age

end

d = Dog.new("Fred", 5)
puts d.name
puts d.age
d.age = 6   #calls age=() method
puts d.age

--output:--
Fred
5
6

ただし、クラスの先頭に attr_accessor 行を記述するのが通例です。

于 2013-08-10T14:10:41.383 に答える