我不明白为什么在这个简短的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 ?
谢谢
答案 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