loader.load((newSource是URLRequest)是什么?newSource:new URLRequest(newSource));做?

时间:2008-09-29 17:42:56

标签: flex flash actionscript-3

我在他的Book组件的Ely Greenfield's SuperImage中遇到了以下代码 - 我理解loader.load()但其余的做了什么?

loader.load((newSource is URLRequest)? newSource:new URLRequest(newSource));

它看起来像某种疯狂的内联if语句,但仍然,我有点预先准备好了。如果它是if语句 - 这种方式比常规if语句好吗?

4 个答案:

答案 0 :(得分:11)

?被称为“三元运算符”,它的基本用途是:

(expression) ? (evaluate to this if expression is true) : (evaluate to this otherwise);

在这种情况下,如果newSource是一个URLRequest,loader.load将直接传递给newSource,否则它将传递一个从newSource构建的新URLRequest。

三元运算符经常被用作if语句的更简洁形式,因为它允许ifs被内联。在这种情况下,相应的代码是:

if (newSource is URLRequest)
   loader.load(newSource);
else
   loader.load(new URLRequest(newSource));

答案 1 :(得分:1)

基本上它说的是:如果newsource是一种URLRequest,那么将newSource变量传递给load方法,如果它不是一种URLReuqest,则创建一个新的URLRequest并将其传递给load方法。

基本语法是:(条件)? (如果为true则执行的代码):(如果为false则执行代码)

答案 2 :(得分:0)

这是使用ternary ?: operator。第一部分是条件,介于?之间?和:如果条件为真,则返回什么。之后:如果条件为假,则返回什么。

一个更简单的例子

String str = null;
int x = (str != null) ? str.length() : 0;

相同
String str = null;
int x;
if (str != null)
  x = str.length()
else
  x = 0;

答案 3 :(得分:0)

基本上,就我所知,这意味着它要求变量newSource的类是String或URLRequest,如workmad和jason解释的那样。如果是URLRequest,它将 运行loader.load(newSource:URLRequest) 。如果它不是URLRequest,则它自动表示它是一个String(换句话说就是url)。在这种情况下,它将运行 loader.load(new URLrequest(newSource:String)

完整的代码可能如下所示:

function myFunction(newSource:Object):SomeClass {
var loader:URLLoader = new URLLoader();
loader.load((newSource is URLRequest)? newSource:new URLRequest(newSource));
}

此致

菲利普A.