loader.load((newSource is URLRequest)?newSource:new URLRequest(newSource))到底是什么?做?

时间:2020-03-06 14:53:12  来源:igfitidea点击:

我从Ely Greenfield的Book组件中看到了Ely Greenfield的SuperImage中的以下代码,我了解loader.load(),但是其余的工作是什么?

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

看起来有些疯狂的内联if语句,但是我还是有些困惑。如果是if语句,这种方法比常规if语句更好吗?

解决方案

这是使用三元?:运算符。第一部分是条件,介于?和:是条件为真时要返回的内容。在:之后是条件为假时要返回的内容。

一个简单的例子

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

将与

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

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

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

?被称为"三元运算符",它的基本用法是:

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

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

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

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

就我所知,基本上,这意味着它要问的是变量newSource的类是String还是URLRequest,如workmad和jason所解释。如果它是URLRequest,它将运行loader.load(newSource:URLRequest)。如果不是URLRequest,则自动表示它是一个字符串(即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