Можно ли попросить, чтобы рубин рассматривал предупреждения как ошибки?

У меня такая же проблема, что мое приложение работало в Vs2013, но получило ошибку после обновления до Vs2015.

  1. В Vs2015 щелкните правой кнопкой мыши папку «Справочники» проекта, чтобы открыть диспетчер пакетов NuGet
  2. В разделе «Обзор» найдите «DotNetCompilerPlatform» и установите «Microsoft.CodeDom.Providers.DotNetCompilerPlatform» lib
15
задан Andrew Grimm 19 March 2009 в 01:14
поделиться

2 ответа

Нет, к сожалению, никакого реального способа сделать это, по крайней мере, не на большинстве версий Ruby там (изменения могут существовать), за исключением контроля программы производит и прерывание его, когда предупреждение появляется на стандартной погрешности. Вот то, почему:

  • Ruby определяет Kernel.warn , который Вы можете переопределять , чтобы сделать независимо от того, что Вы желаете (включая выход), и который Вы были бы ожидать (надежда) последовательно использоваться Ruby для создания отчетов о предупреждениях (включая внутреннее, например, анализирующее предупреждение), , но
  • методы, реализованные исходно (в C) в Ruby, в свою очередь непосредственно вызовут собственный метод, названный rb_warn от source/server.c, полностью обход переопределения Kernel.warn (например," string literal in condition" предупреждение, например, выпущенный при выполнении чего-то как: do_something if 'string', печатается через собственный компонент rb_warn от source/parse.c)
  • для создания вещей еще хуже, существует дополнительное, rb_warning собственный метод, который может использоваться Ruby для входа предупреждений, если -w или -v определяется.

Так, если необходимо принять меры только на предупреждениях, сгенерированных вызовом кода приложения Kernel.warn тогда просто, переопределяют Kernel.warn. Иначе у Вас есть точно две опции :

  1. изменяются source/error.c для выхода в [1 114] и rb_warningrb_warn_m?), и восстанавливают Ruby
  2. , контролируют вывод стандартной погрешности Вашей программы для' : warning:' и прерывают его на соответствии
29
ответ дан 1 December 2019 в 02:10
поделиться

Вы также можете потенциально использовать DTrace и перехватывать вызовы к rb_warn и rb_warning , хотя это не приведет к исключениям, которые можно где-то спасти. Скорее, он просто поместит их куда-нибудь, и вы сможете легко их зарегистрировать.

1
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: