Если выражение является функцией, которая возвращает какое-то значение, есть ли способ получить обработанное значение во временной переменной , к которой можно получить доступ только в пределах соответствующего выражения?
Давайте сделаем случайный пример.
функция, используемая в выражениях:
function crazy($input){
return $input * 5 - mt_rand(0, 5);
}
И как я вижу это должно работать:
if(crazy(2) > 5){
$result = $crazyTemporaryVariable . ' crazies';
// because calling crazy(2) here again will:
// 1) process it again,
// 2) because of the `mt_rand();` return different value.
}else{
$result = 'nothing can happen here, because $crazyTemporaryVariable is not set';
}
Другими словами, оно должно создавать временную переменную, если выражение истинно, иначе «ничего» не осталось.
Мне известно, что это можно сделать с помощью вызова функции перед выражением и присвоения ее возвращаемого значения ранее установленной переменной. Но вам нужно создать новую переменную - я вижу небольшое, но все же падение производительности, потому что, если выражение не соответствует требованиям - переменная бесполезна, но остается определенной.
// we have our crazy function above, a new expression
$crazy = crazy(2);
if($crazy > 5){
$result = $crazy . ' crazies';
}else{
$result = 'anything...';
}
// or...
$result = $crazy > 5 ? $crazy . ' crazies' : 'anything';
Примечание: это среда PHP
, в которой я не видел ни такого поведения / возможности, ни на каком-либо другом языке, с которым я сталкивался (там не так много ').
Еще одна вещь, это хорошо относится и к циклам:
while(crazy(2) <= 5){
$result = $crazyTemporaryVariable . ' crazies';
}
// where normally you'd have to change the variable value;
$crazy = crazy(2);
while($crazy <= 5){
$result = $crazy . ' crazies';
$crazy = crazy(2);
}
Примечание: $ crazyTeilitaryVariable - это просто мнимая переменная . И если я пропустил это, я сомневаюсь, что это переменная , думаю, что это может быть время обработки константа EXPRESSION_RESULT
или что-то в этом роде. Но из-за моих английских ограничений я понятия не имею, что искать, чтобы найти его.
Так что да, ключ здесь определен, поэтому доступен, только если выражение истинно .
Итак, вопрос в том, существуют ли языки, которые поддерживают это , и если я пропустил это в PHP
, как я могу получить к нему доступ, тогда + ссылка, пожалуйста?
После написания всего вышесказанного я вспомнил об этом поведении:
if(($crazy = crazy(2)) > 5){
$result = $crazy . ' crazies';
}else{
$result = $crazy . ' crazies, but... not crazy enough.';
}
Это почти то, что я ищу, но это почти то же самое, что и определение нашей переменной ранее, и вы можете получить доступ к результату функции, если выражение совпадает, следовательно, на этот раз оно не обрезается.
Заранее спасибо!
воображаемый пример
троичный и javascript ..
// could be: (keep in mind, this would not work with our _crazy_ function, because of random number.)
var result = string && string.search(/\s/) ? string.substr(0, __tempvar__) : string; // not available
// ...but instead is
var result = string.search(/\s/g) > 0 ? string.substring(0, string.search(/\s/g)) : string; // +1 repeated function call that affects performance.