我在他的Book组件的Ely Greenfield's SuperImage中遇到了以下代码 - 我理解loader.load()但其余的做了什么?
loader.load((newSource is URLRequest)? newSource:new URLRequest(newSource));
它看起来像某种疯狂的内联if语句,但仍然,我有点预先准备好了。如果它是if语句 - 这种方式比常规if语句好吗?
答案 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.