为什么它没有资本化呢?

时间:2014-05-08 07:47:00

标签: ruby

我不明白为什么在这个简短的Ruby脚本中它没有大写“lawrence”:

class Player

  def his_name #the same as attr_reader :name ?
    @name
  end

  def his_name=(new_name) #the same as attr_writer :name ?
    @name = new_name.capitalize
  end

  def initialize(name, health=100)
    @name = name.capitalize
    @health = health
  end

player2 = Player.new('larry', 60)
puts player2.his_name 
puts player2.his_name=('lawrence')

我得到了这个输出:

60
Larry
lawrence #why not Lawrence ?

谢谢

2 个答案:

答案 0 :(得分:3)

您的方法有效并且它确实将名称大写,Ruby只是忽略了方法的返回值。来自documentation for methods

  

请注意,对于赋值方法,返回值始终为   忽略。相反,将返回参数:

def a=(value)
  return 1 + value
end

p(a = 5) # prints 5

答案 1 :(得分:2)

表达式x = y的结果是y,表达式o.x = y的结果是y - 无论是变量赋值还是变量赋值都无关紧要二传手。 (通过上述形式调用的setter的结果将被丢弃。)

与:比较:

puts player2.his_name = 'lawrence' # -> lawrence
puts player2.his_name              # -> Lawrence