Дротик: магические константы

PHP предлагает полезные магические константы, такие как:

__CLASS__
__FILE__
__METHOD__

и так далее. Так же

get_class()

Функция обеспечивает аналогичную функциональность.

Есть ли что-нибудь подобное в дартс?

1 ответ

Решение

Константы компилятора, похожие на PHP, недоступны. Но вы можете сделать это вручную (не постоянное значение).

Это медленнее, но это работает.

import 'package:stack_trace/stack_trace.dart';

void main() {
  print(__LINE__);
  print(__METHOD__);
  print(__FILE__);
  new Foo();
}

class Foo {
  Foo() {
    print(__CLASS__);
  }
}

String get __CLASS__ {
  var frames = new Trace.current().frames;
  if(frames.length > 1) {
    var member = frames[1].member;
    var parts = member.split(".");
    if(parts.length > 1) {
      return parts[1];
    }
  }

  return null;
}


String get __METHOD__ {
  var frames = new Trace.current().frames;
  if(frames.length > 1) {
    return frames[1].member;
  }

  return null;
}

String get __FILE__ {
  var frames = new Trace.current().frames;
  if(frames.length > 1) {
    return frames[1].uri.path;
  }

  return null;
}

int get __LINE__ {
  var frames = new Trace.current().frames;
  if(frames.length > 1) {
    return frames[1].line;
  }

  return null;
}
4
main
/home/andrew/dart/for_web/test/bin/test.dart
Foo
Другие вопросы по тегам