在Ruby方法的参数前面是什么= for

时间:2013-10-05 23:50:48

标签: ruby

我搜索了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初学者。

2 个答案:

答案 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