为什么我可以向不同的接收者发送相同的消息?

时间:2017-07-17 19:51:31

标签: ruby

如果我写这样的方法:

def print_message(text, string)
   text.print_line string
end

Ruby会在我的其余代码中向不同的方法发送一条名为#print_line的消息。这些方法都将以不同的方式实现#print_line。例如:

class PutsText
  def print_line(string)
    puts(string + "\n")
  end
end

class UpcaseText
  def print_line(string)
    puts(string.upcase + "\n")
  end
end

print_message PutsText.new, "Text"
print_message UpcaseText.new, "uppercase text"

我相信这就是所谓的多态性。

现在,我不明白的是这段代码也有效:

def print_message(text, string)
   text.print_line string
end

def print_number(number, float)
   number.print_line float
end

class PutsText
   def print_line(string)
     puts(string + "\n")
   end
end

class UpcaseText
  def print_line(string)
    puts(string.upcase + "\n")
  end
end

class PutsNumber
  def print_line(float)
    puts(float)
  end
end

print_message PutsText.new, "Text"
print_message UpcaseText.new, "uppercase text"
print_number PutsNumber.new, (3.56 + 1.27)

对于像这样的不同上下文中的Ruby,消息#print_line不应该是不明确的吗?

0 个答案:

没有答案