Deutsch

C# - pattern matching - many discards

10.03.24 12:14
Re: C# - pattern matching - many discards
 
alex445 коренной житель
в ответ MrSanders 10.03.24 10:40, Последний раз изменено 10.03.24 12:20 (alex445)
сорри за возможно глупый вопрос: но вот это разве не делегаты?
Вот кстати да, как уточняет AlexNek, было бы неплохо определиться, а что мы вообще делегатами называем.
Для меня делегат это "переменная-метод". Которую можно использовать как метод.
Т.е. чтобы можно было сделать так:



Function<Integer, Double> half = a -> a /2.0;
// Applying the function to get the result
System.out.println(half(10));
В яве так сделать нельзя.
И этот "конструкт" должен быть "first-class citizen". Выполнять все 4 требования. В яве ссылки нa методы нельзя сравнивать. Не работает.





import java.util.function.Function;
public class MyClass {
    public static String value(int i) {
        return "Value: " + i;
    }
    public static void main(String args[]) {
      Function<Integer, String> f1 = MyClass::value; 
      Function<Integer, String> f2 = MyClass::value;    
      System.out.println("Same method? : " + f1.equals(f2));
    }
}
Вернёт false.

Function<Integer, Double> half = a -> a /2.0; компилятором превращается в




Function<Integer, Double> half = new Function<Integer, Double>() {
  @Override
  public Double apply(Integer t) {
    return t / 2.0;
  }
}
Новый класс. Сделали ещё раз то же самое, получили ещё один новый класс. То же и с ссылками,
из Function f1 = MyClass::value; получается



Function<Integer, String> f1 = new Function<Integer, String>() {
  @Override
  public String apply(Integer t) {
    return MyClass.value(t);
  }
}
Два раза использовали ссылку, получили два класса. Сравниваешь их, а они не равны. Что правильно, это же разные классы. А вот логично было бы иметь возможность писать f1 == f2 и получать true. Если б это были и правда ссылки на методы. Вот такая фигня, малята.

Толчея воды в ступе. Спор даже не о словах, а о буквах. Единственный вывод, что я делаю из этой простыни: Джава говно, Сишарп - конфетка (по сравнению с Джавой).

 

Перейти на