Подскажите плиз, в каких местах в Nemerle применяется оператор "_"
если я не ошибаюсь —
1 для контруирования лямбда-функций из выражений,
2 для приема возвращаемых значений функций, которые на самом деле не нужны (dev/null)
где еще?
Спасибо!
Несколько вопросов.
Если например "_ + foo()" — это лямбда, а "_ = foo()" — это запись возвращаемого значения из foo()? То есть получается, что операторы присваивания "отключают" оператор "_" как оператор образования лямбды и переключают его в режим переменной?
И что такое "def OnClick(_)" ?
Re[3]: Применение оператора "_"
От:
Аноним
Дата:
09.08.13 07:14
Оценка:
Здравствуйте, Аноним, Вы писали:
А>И что такое "def OnClick(_)" ?
Игнорирование одного параметра у функции
Re[4]: Применение оператора "_"
От:
Аноним
Дата:
09.08.13 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>И что такое "def OnClick(_)" ? А>Игнорирование одного параметра у функции
В смысле? (я просто с немерле весьма поверхностно знаком). Это "частичное применение", или обращение к значению по умолчанию, или что-то еще? Можно это показать на более развернутом примере?
Здравствуйте, Аноним, Вы писали:
А>В смысле? (я просто с немерле весьма поверхностно знаком). Это "частичное применение", или обращение к значению по умолчанию, или что-то еще? Можно это показать на более развернутом примере?
def OnClick(_) {} это функция параметры которой выведутся из применения. Например, если её добавить в событие Control.Click, то у неё будет сигнатура EventHandler.
Здравствуйте, Аноним, Вы писали:
А>Если например "_ + foo()" — это лямбда, а "_ = foo()" — это запись возвращаемого значения из foo()? То есть получается, что операторы присваивания "отключают" оператор "_" как оператор образования лямбды и переключают его в режим переменной?
"_" это не оператор, а токен имеющий несколько различных значений в грамматике языка. Эти значения прописаны в самом парсере.
Ce n'est que pour vous dire ce que je vous dis.
Re[4]: Применение оператора "_"
От:
Аноним
Дата:
09.08.13 07:52
Оценка:
Здравствуйте, Don Reba, Вы писали:
DR>"_" это не оператор, а токен имеющий несколько различных значений в грамматике языка. Эти значения прописаны в самом парсере.
Ну надо же его как-то назвать Вероятно, можно сказать, что это ключевое слово.
Интересно, как именно выбираются значения для "_" в различных случаях.
Здравствуйте, Аноним, Вы писали:
А>Интересно, как именно выбираются значения для "_" в различных случаях.
grep -n Wildcard ncc\*\*.n
Ce n'est que pour vous dire ce que je vous dis.
Re[6]: Применение оператора "_"
От:
Аноним
Дата:
09.08.13 12:15
Оценка:
Здравствуйте, Don Reba, Вы писали:
DR>grep -n Wildcard ncc\*\*.n DR>
Я надеялся все-же на какую-то документацию...
Подчеркивание есть кстати и в Scala, и возможно в каких-то еще языках — хочется собрать все варианты использования.
Здравствуйте, Аноним, Вы писали:
А>Подскажите плиз, в каких местах в Nemerle применяется оператор "_" А>если я не ошибаюсь — А>1 для контруирования лямбда-функций из выражений, А>2 для приема возвращаемых значений функций, которые на самом деле не нужны (dev/null) А>где еще?
Это не оператор. Это символ подстановки (wilcard).
В любом своем применении он заменяет переменную или означает плейсхолдер. В частичном применении функций _ является всегда плейсхолдером. Во всех остальных местах образует безымянную переменную. Если взять примеры Don Reba, то их можно переписать с использованием реальных переменных:
mutable x;
x = MessageBox("Hello World");
def hash = objects.Map(_.GetHashCode()).Fold(0, _ ^ _); // Вот здесь заменить нельзя! Тут _ означает плейсхолдер, а не переменную.def OnClick(x)
{
}
match (n)
{
| 1 => "one"
| 2 => "two"
| x => "many"
}
try
{
}
catch
{
x is NotSupportedException => ()
}
Еще _ можно использовать как префикс переменной. Компилятор не будет выдавать предупреждение, если такие переменные не использованы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.