Я предполагаю, что этот несколько искусственный сценарий не совсем то, что вы пытаетесь ответить, поэтому я собираюсь сделать предположение, что в каком-то другом случае есть какая-то ценность.
На языках с функциональными конструкциями вы можете "выбирать" элементы из коллекции, которые соответствуют условию.
В рубине:
payment={cash=>true, credit=>true, check=>false}
methods_used=payment.select{ |key,value| value==true}.map { |key,value| key}
доходность [: наличные,: кредит]
В C # 3:
var payment = new Dictionary<string, bool>
{{"cash", true}, {"credit",true}, {"check", false}};
var items=payment.Where(x => x.Value == true).Select(x => x.Key);
Console.WriteLine(String.Join(",",items.ToArray()));
В большинстве языков, о которых я могу думать, вы не можете делать то, что вам нужно, прямо из привязок переменных, не добавляя переменные в коллекцию или словарь. Возможно, есть какое-то исключение, но я не могу вспомнить ни одного из них.
Более близким приближением может быть сопоставление с образцом в таких языках, как Haskell, F # и OCaml, но я до сих пор не могу найти способ заставить его выглядеть так, как вы намекаете.
В Boo вы можете изменить конвейер компилятора, чтобы заменить семантику оператора if чем-то, что дало бы вам то, что вы хотите. Я бы, вероятно, использовал альтернативное ключевое слово, но вы могли бы в основном извлечь все подвыражения и добавить имена переменных в область видимости блока, или добавить значения «да» в одну коллекцию и «nos» в другую, и добавить именованная переменная по соглашению. Чтобы реализовать его с пользой, вам, возможно, придется нарушить соглашение об оценке короткого замыкания, которое раздражало бы большинство людей, привыкших к современной конструкции языка программирования.