Используя единственный параметр, EventArgs, для данных, переданных событием, позволяет Вам добавлять данные к своему событию в будущих версиях Вашего программного обеспечения, не повреждая существующих потребителей. Вы просто добавляете новых участников к существующему EventArgs-производному-классу или создаете производный класс с новыми участниками.
Иначе непротиворечивость и принцип наименьшего количества удивления выравнивают по ширине использование EventArgs для передающих данных.
Что касается отправителя, в некоторых (но не все) случаи полезно знать то, что тип отправил событию. Используя тип кроме объекта для отправителя аргумент слишком строг: это означало бы, что другие отправители не могли снова использовать ту же подпись события.
Строка 2 использует метод widen
как оператор, вместо того, чтобы использовать его как метод Java:
val this1 = this.widen(that.width)
Ошибка возникает из-за того, что вы пропустили круглые скобки, которые можно сделать только при использовании метода в обозначении оператора. Вы не можете сделать это, например:
"a".+ "b" // error: ';' expected but string literal found.
Вместо этого вы должны написать
"a".+ ("b")
На самом деле вы можете сделать это с целыми числами, но это выходит за рамки этого вопроса.
Подробнее:
Я не пробовал, но, возможно, это сработает: val this1 = this.widen ( that.width)
widen
, вероятно, метод, принимающий один параметр (плюс ссылка this
), такие методы можно использовать как операторы, как в вашем первом примере кода.
Когда вы используете точку, вы используете точечный стиль для вызова метода. Когда вы этого не сделаете, вы используете операторский стиль. Вы не можете смешивать оба синтаксиса для одного и того же вызова метода, хотя вы можете смешивать два для разных вызовов - например, that.width, используемая в качестве параметра в вызове стиля оператора для расширения.
См. Какие символы я могу опустить в Scala? или Каковы точные правила, когда вы можете опускать круглые скобки, точки, фигурные скобки, = (функции) и т. Д.? .