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