Применение оператора "_"
От: Аноним  
Дата: 08.08.13 19:16
Оценка:
Подскажите плиз, в каких местах в Nemerle применяется оператор "_"
если я не ошибаюсь —
1 для контруирования лямбда-функций из выражений,
2 для приема возвращаемых значений функций, которые на самом деле не нужны (dev/null)
где еще?
Re: Применение оператора "_"
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 08.08.13 22:01
Оценка:
_ = MessageBox("Hello World");

def hash = objects.Map(_.GetHashCode()).Fold(0, _ ^ _);

def OnClick(_)
{
}

match (n)
{
| 1 => "one"
| 2 => "two"
| _ => "many"
}

try
{
}
catch
{
    _ is NotSupportedException => ()
}
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: Применение оператора "_"
От: Аноним  
Дата: 09.08.13 07:05
Оценка:
Здравствуйте, Don Reba, Вы писали:

Спасибо!
Несколько вопросов.
Если например "_ + foo()" — это лямбда, а "_ = foo()" — это запись возвращаемого значения из foo()? То есть получается, что операторы присваивания "отключают" оператор "_" как оператор образования лямбды и переключают его в режим переменной?

И что такое "def OnClick(_)" ?
Re[3]: Применение оператора "_"
От: Аноним  
Дата: 09.08.13 07:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И что такое "def OnClick(_)" ?

Игнорирование одного параметра у функции
Re[4]: Применение оператора "_"
От: Аноним  
Дата: 09.08.13 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>И что такое "def OnClick(_)" ?

А>Игнорирование одного параметра у функции

В смысле? (я просто с немерле весьма поверхностно знаком). Это "частичное применение", или обращение к значению по умолчанию, или что-то еще? Можно это показать на более развернутом примере?
Re[5]: Применение оператора "_"
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 09.08.13 07:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В смысле? (я просто с немерле весьма поверхностно знаком). Это "частичное применение", или обращение к значению по умолчанию, или что-то еще? Можно это показать на более развернутом примере?


def OnClick(_) {} это функция параметры которой выведутся из применения. Например, если её добавить в событие Control.Click, то у неё будет сигнатура EventHandler.
Ce n'est que pour vous dire ce que je vous dis.
Re[3]: Применение оператора "_"
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 09.08.13 07:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если например "_ + 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>"_" это не оператор, а токен имеющий несколько различных значений в грамматике языка. Эти значения прописаны в самом парсере.


Ну надо же его как-то назвать Вероятно, можно сказать, что это ключевое слово.
Интересно, как именно выбираются значения для "_" в различных случаях.
Re[5]: Применение оператора "_"
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 09.08.13 08:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Интересно, как именно выбираются значения для "_" в различных случаях.


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, и возможно в каких-то еще языках — хочется собрать все варианты использования.
Re: Применение оператора "_"
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.13 14:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите плиз, в каких местах в 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 => ()
}


Еще _ можно использовать как префикс переменной. Компилятор не будет выдавать предупреждение, если такие переменные не использованы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.