Что, черт возьми, делает loader.load ((newSource is URLRequest)? NewSource: new URLRequest (newSource)); делать? - PullRequest
0 голосов
/ 29 сентября 2008

Я наткнулся на следующий код в SuperImage Эли Гринфилда из его компонента Book - я понимаю loader.load (), но что делает остальная часть?

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

Это похоже на какое-то сумасшедшее встроенное выражение if, но я немного озадачен. А если это оператор if - лучше ли это, чем обычный оператор if?

Ответы [ 4 ]

11 голосов
/ 29 сентября 2008

? называется «троичный оператор», и его основное использование:

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

В этом случае, если newSource является URLRequest, loader.load будет передан newSource напрямую, в противном случае ему будет передан новый URLRequest, созданный из newSource.

Тернарный оператор часто используется в качестве более краткой формы оператора if, поскольку позволяет вставлять оператор if. Соответствующий код в этом случае будет:

if (newSource is URLRequest)
   loader.load(newSource);
else
   loader.load(new URLRequest(newSource));
1 голос
/ 29 сентября 2008

По сути, это означает, что если источник новостей является типом URLRequest, то передайте переменную newSource в метод загрузки, если это не тип URLReuqest, создайте новый URLRequest и передайте его в метод загрузки.

Основной синтаксис: (условие)? (код для выполнения, если true): (код для выполнения, если false)

0 голосов
/ 27 марта 2009

По сути, это означает, насколько я знаю, это вопрос о том, является ли переменная newSource классом String или URLRequest, как объяснил workmad и jason. Если это URLRequest, он запустит loader.load (newSource: URLRequest) . Если это не URLRequest, это автоматически означает, что это строка (другими словами, URL). И в этом случае он будет запускать loader.load (новый URLrequest (newSource: String) .

Полный код может выглядеть примерно так:

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

С уважением,

Филипе А.

0 голосов
/ 29 сентября 2008

это использует троичный?: Оператор . первая часть это условие, между? и: что вернуть, если условие верно. после: есть, что вернуть, если условие ложно.

более простой пример

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

будет таким же, как

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