Spec-Zone.ru › Dart 2

dart:core

метод noSuchMethod

dynamic noSuchMethod(
  1. Invocation invocation
)

Вызывается при обращении к несуществующему методу или свойству.

Динамический вызов члена может попытаться вызвать член, которого нет у объекта-получателя. Пример:

dynamic object = 1;
object.add(42); // Statically allowed, run-time error

Этот некорректный код вызовет метод noSuchMethod целого числа 1 с объектом Invocation, представляющим вызов .add(42) и аргументы (после чего возникнет исключение).

Классы могут переопределить noSuchMethod, чтобы задать пользовательское поведение для таких некорректных динамических вызовов.

Класс с нестандартной реализацией вызова noSuchMethod также может не предоставлять реализации членов своего интерфейса. Пример:

class MockList<T> implements List<T> {
  noSuchMethod(Invocation invocation) {
    log(invocation);
    super.noSuchMethod(invocation); // Will throw.
  }
}
void main() {
  MockList().add(42);
}

Этот код не вызывает предупреждений или ошибок во время компиляции, хотя класс MockList не имеет конкретной реализации ни одного из методов интерфейса List. Вызовы методов List перенаправляются в noSuchMethod, поэтому этот код log вызов, подобный Invocation.method(#add, [42]), после чего возникнет исключение.

Если из noSuchMethod возвращается значение, оно становится результатом исходного вызова. Если тип значения не допускает его возврата исходным вызовом, во время вызова возникает ошибка типа.

По умолчанию выбрасывается NoSuchMethodError.

Реализация

@pragma("vm:entry-point")
@pragma("wasm:entry-point")
external dynamic noSuchMethod(Invocation invocation);

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-core/Object/noSuchMethod.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API