如果我写这样的方法:
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不应该是不明确的吗?