我有一个ruby类,在本问题的最后部分完整显示。它有2个公共实例方法。第一个公共实例方法名为plus
,第二个公式名为multiply
。
当我仅调用Adder.new(3, 4).plus
时,它会返回7
,这是添加3
和4
时的预期值。但是,在multiply
实例方法中,我首先调用plus
实例方法并且它不断返回nil
但是如果我自己调用plus
实例方法,则返回正确的值如下所示。
为什么从plus
实例方法中调用nil
实例方法返回multiply
?
调用plus
实例方法
Adder.new(3, 4).plus
# adding figures
# I am the added value 7.0
调用乘法实例方法
Adder.new(3, 4).multiply
# called from multiply value for plus is nil
整个班级粘贴在下面:
class Adder
def self.plus( first, second)
new(first, second).multiply
end
def initialize(first, second)
@first = first
@second = second
end
def plus
puts 'adding figures'
@k = add_them(@first, @second)
puts "I am @k = #{@k}"
end
def multiply(third = 10)
#@results = @k
@result = plus
#@result = add_them(@first, @second)
puts "called from multiply method value for plus is #{@results.inspect}"
end
private
def add_them(first, second)
@added = (first + second).round(4)
puts "I am the added value #{@added}"
end
end
答案 0 :(得分:2)
puts "I am @k = #{@k}"
以上返回nil
- puts
始终返回nil
。您可以使用tap
打印要返回的值:
def plus
puts 'adding figures'
(@k = add_them(@first, @second)).tap do
puts "I am @k = #{@k}"
end
end
答案 1 :(得分:1)
puts
不会返回值;
def plus
puts 'adding figures'
@k = add_them(@first, @second)
puts "I am @k = #{@k}"
end
应该是
def plus
add_them @first, @second
end
答案 2 :(得分:1)
因为plus
中执行的最后一个方法是puts
,它返回nil
。