主要是区别ruby中setter方法和变量赋值,其中以“=”结尾的方法将变为setter方法

#使用attr_accessor或者attr_writer来实现setter方法
class Demo
  attr_accessor :name
end

obj = Demo.new
obj.name = "jayzen"
p obj.name #"jayzen"

#定义setter方法
class SetMe
  def initialize
    @value = 0
  end

  def value
    @value
  end

  def value=(x)
    @value=x
  end
end

x = SetMe.new
#允许在等号两边加空格,其实是setter方法,需要进行显示调用
x.value = 1
x.value #=>1

对于setter方法,需要进行显示调用,不然会被认为是进行变量赋值

class Demo
  attr_accessor :name

  def initialize
    name = "jayzen" #这里是变量赋值,除了def之外,name的值就无效了
  end
end

#setter方法
class Demo
  attr_accessor :name

  def initialize
    self.name = "jayzen" #这里set方法,使用self进行显示调用
  end
end

#可以使用@name的方法替代self.name
class Demo
  attr_accessor :name

  def initialize
    @name = "jayzen" 
  end
end

不是setter方法中,不用显示调用。

class Demo
  attr_accessor :name

  def initialize
    self.name = "jayzen"
  end

  def full_name
    name
    #self.name,也可以,但是没有必要
  end
end

obj = Demo.new
p obj.full_name

如上的代码中,遇到name,会查找当前作用域中是否存在同名变量,如果不存在,会将这个标示符作为方法名进行再次查找。

results matching ""

    No results matching ""