从另一个方法调用一个方法的ruby返回nil而不是值

时间:2014-05-24 17:51:45

标签: ruby

我有一个ruby类,在本问题的最后部分完整显示。它有2个公共实例方法。第一个公共实例方法名为plus,第二个公式名为multiply

当我仅调用Adder.new(3, 4).plus时,它会返回7,这是添加34时的预期值。但是,在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

3 个答案:

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