0

我搜索了 Ruby 方法,但找不到我要找的东西。在下面的方法定义中,它在参数之前有 = 符号。我想知道如何/何时使用。

def age=(value)
  @age = value
end

我需要支架吗?我可以这样写吗?

def age=value
  @age = value
end

和下面的一样吗?

def age (value)
  @age = value
end

或者

def age (value=value)
  @age = value
end

我是一名 Ruby 初学者。

4

2 回答 2

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)

从功能上讲,它的作用几乎相同。但是 asetter可以用于使用 setter 进行元编程的情况。

于 2013-10-05T23:53:01.423 回答
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
于 2013-10-06T00:03:43.480 回答