Несколько Конструкторов с одинаковыми аргументами

Здесь есть хорошая статья , из которой взяты большинство моих описаний. Просто короткое сравнение функций и методов, касающихся моего понимания. Надеюсь, что это поможет:

Функции: Они - в основном объект. Точнее, функции - это объекты с методом apply; Поэтому они немного медленнее, чем методы из-за их накладных расходов. Это похоже на статические методы в том смысле, что они не зависят от вызываемого объекта. Простой пример функции аналогичен приведенному ниже:

val f1 = (x: Int) => x + x
f1(2)  // 4

Строка выше ничего, кроме назначения одного объекта другому, как object1 = object2. На самом деле объект2 в нашем примере является анонимной функцией, и из-за этого левая сторона получает тип объекта. Следовательно, теперь f1 является объектом (Function). Анонимная функция на самом деле является экземпляром Function1 [Int, Int], что означает функцию с 1 параметром типа Int и возвращаемое значение типа Int. Вызов f1 без аргументов даст нам подпись анонимной функции (Int => Int =)

Методы: они не являются объектами, а назначаются экземпляру класса, т. Е. Объекта. Точно так же, как метод в java или функции-члене в c ++ (как Raffi Khatchadourian указал в комментарии к этот вопрос ) и т. Д. Простым примером метода является просто например:

def m1(x: Int) = x + x
m1(2)  // 4

Строка выше - это не простое назначение значений, а определение метода. Когда вы вызываете этот метод со значением 2 как вторая строка, x заменяется на 2, и результат будет вычисляться, и вы получите 4 в качестве вывода. Здесь вы получите сообщение об ошибке, если просто напишите m1, потому что это метод и ему нужно значение ввода. Используя _, вы можете назначить метод функции, подобной приведенной ниже:

val f2 = m1 _  // Int => Int = 

0
задан JeffS 3 April 2012 в 03:03
поделиться