我搜索了Ruby方法,但我找不到我要找的东西。在以下方法定义中,它在参数前面具有=符号。我想知道如何/何时使用。
def age=(value)
@age = value
end
我需要一个支架吗?我可以这样写吗?
def age=value
@age = value
end
是否与以下相同?
def age (value)
@age = value
end
OR
def age (value=value)
@age = value
end
我是Ruby初学者。
答案 0 :(得分:4)
=
表示它是班级的“设定者”。它可以定义为:
def age=(value)
@age = value
end
或
def age= value
@age = value
end
如果这样定义,如果你有一个类的实例,比如foo
,那么你可以这样做:
foo.age = 10
它将为类实例设置@age
的值。
你也可以这样做:
def age(value)
@age = value
end
或
def age value
@age = value
end
然后你需要这样称呼它:
foo.age(10)
从功能上讲,它几乎完全相同。但是,如果您使用setter进行元编程,则可以使用setter
。
答案 1 :(得分:3)
# method name is age=
def age=(value)
@age = value
end
age = 1 #=> sets @age as 1
age=(1) #=> sets @age as 1
# same as before, parenthesis are needed when the method has multiple inputs
def age=value
@age = value
end
age = 1 #=> sets @age as 1
age=(1) #=> sets @age as 1
# method name is age
def age (value)
@age = value
end
age 1 #=> sets @age as 1
age(1) #=> sets @age as 1
# method name is age and the value argument has a default value of 1
def age (value=1)
@age = value
end
age #=> sets @age as 1
age 2 #=> sets @age as 2
# this is not a valid declaration unless value is a defined method on the object
def age(value=value)
@age = value
end