主要是区别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,会查找当前作用域中是否存在同名变量,如果不存在,会将这个标示符作为方法名进行再次查找。