Существует ли Perl, эквивалентный Python, 'если __ называют __ ==' __ основной __ ''?

Базовая реализация не должна быть классом дел. Просто сделайте это признаком, и тогда все ваши кейс-классы смогут его расширить.

 trait Stringification { self: Product => 
    override def toString() = 
      getClass.getDeclaredFields
      .zip(productIterator.toSeq)
      .map { case (a, b) => s"${a.getName}=$b" }
      .mkString("\n")
 }

, а затем

  case class Foo(foo: String, bar: Int) extends Stringification
  case class Bar(foo: Foo, bar: String) extends Stringification

... и т. Д.

30
задан brian d foy 2 April 2009 в 14:31
поделиться

3 ответа

unless (caller) {
  print "This is the script being executed\n";
}

Посмотрите вызывающую сторону. Это возвращается undef в основном сценарии. Обратите внимание, что это не работает в подпрограмме, только в коде верхнего уровня.

47
ответ дан cjm 27 November 2019 в 23:43
поделиться

Посмотрите "Подклассы для Приложений (Глава 18)" часть brian d статья Five Ways to Improve Your Perl Programming foy.

10
ответ дан Community 27 November 2019 в 23:43
поделиться

unless caller хорошо, но более прямая параллель, а также более явная проверка:

use English qw<$PROGRAM_NAME>;

if ( $PROGRAM_NAME eq __FILE__ ) { 
    ...
}

Просто мысль я поместил это там.

Править

Следует иметь в виду это $PROGRAM_NAME (или'$0'), перезаписываемо, таким образом, это не абсолютно. Но, в большей части практики - за исключением несчастного случая или неистовствующих модулей - это, вероятно, не будет изменено или изменено самое большее локально в другом объеме.

4
ответ дан Axeman 27 November 2019 в 23:43
поделиться