我的主要语言是静态类型(Java)。在Java中,您必须从每个方法返回单个类型。例如,您不能使用有条件返回a String
或有条件返回a的方法Integer
。但是例如在JavaScript中,这是很有可能的。
用静态类型的语言,我明白了为什么这是一个坏主意。如果返回Object
了每个方法(所有类都继承自该方法的公共父级),那么您和编译器将不知道您在处理什么。您必须在运行时发现所有错误。
但是在动态类型语言中,甚至可能没有编译器。在动态类型的语言中,对于我来说,为什么返回多个类型的函数不是一个好主意并不为人所知。我在静态语言方面的背景使我避免编写此类函数,但是我担心自己会紧盯着一种功能,该功能可以使我的代码更清晰一些,从而无法看到。
编辑:我将删除我的示例(直到我可以想到一个更好的示例)。我认为这引导人们回答我不想提出的观点。
(coerce var 'string)
a string
或类似的收益(concatenate 'string this that the-other-thing)
。我也写过类似的东西ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
。而且,在那儿,我可能只会返回loader.getThingById (SubclassA.class, 14)
SubclassB
SubclassA