AS3中的“*返回类型”是什么意思?

3
我看到Action Script中有一个方法,它的返回类型是*。
public function f(s:String):*

这个[*]是什么意思?
2个回答

8
那个答案并不完全正确。不存在“未分类(untyped)”这一概念,而且*和Object之间只有微小的差别,因为可以认为每种类型都是从Object继承而来,也就是说Object代表未分类。但是,*表示未定义的值,而Object则不是。这是一个很大的区别!对于动态语言来说非常有用,因为这意味着对象的属性可以为undefined,这与defined和null是不同的。
例如,在{x:null}中,y是undefined,而x是已定义但没有值的。你可以利用这一点。
var yesNoMaybe: *;

yesNoMaybe = true;
yesNoMaybe = false;
yesNoMaybe = undefined;

“未类型化”这个概念确实存在;语言参考在描述 * 特殊类型时的第一句话中使用了这个术语:“指定属性为未类型化”。 - hasseg
你应该再读一遍我的回答。作为程序员,"var x: Object = 1; var y: * = 1; var z = 1"之间有什么区别?从类型的角度来看,它们都是"未定义类型",因为每种类型都继承自对象类型,在运行时没有特定的类型。但是y和z可以是未定义的。这是一个很大的区别,也涉及到速度!很多人认为返回"*"对于未定义的事物很好,但他们最好使用Object。 - Joa Ebert
1
你在这里提出的最佳实践建议一点也没有错。我的意图只是澄清“未类型化”这个术语的含义;如果使用与语言参考中使用的定义不一致的方式,可能会令人困惑。 - hasseg

7
* 符号表示“未指定类型”,意味着类型可以是任何类型(并且值可以是undefined)。使用星号的效果与不指定类型相同,但最好使用它来明确您的意图。有关更多信息,请参见语言参考

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接