LINUX.ORG.RU

История изменений

Исправление rsync, (текущая версия) :

Декораторы, которые ты так не любишь

я знаю что такое декораторы, но это не переиспользование имён, это врапперы.

Врапперы в виде декораторов появились от того что нормальных лямбд нету, были бы нормальные лямбды, то люди бы писали простые функции, принимающие другие функции как аргументы.

но поскольку анонимную функцию объявить по месту нельзя - вот и имаются с декораторами

$.ajax({
  url: url,
  success: function(data) {
     // bla
  }
);

подобный код на питоне невозможен (ибо нормальных лямбд нету), поэтому чтоб хоть где-то заменить лямбды на приемлемый код втащили декораторы:


import pytest
import os

@pytest.mark.skipif(os.getenv('DB', '') == '')
def test_db():
   # тестируем коннектор к БД

были бы лямбды - они бы сюда красиво легли, но их нет.

и соответственно в тестовой системе невозможно нормально написать например блок сабтестов:


subtest 'Потестим некоторые мелочи' => sub {
   plan tests => 2;

   ok $user->foo, 'foo есть';
   is $user->bar, 'baz', 'bar правильно установлен';
}

и так далее.

да, декораторы местами позволяют скомпенсировать отсутствие лямбд, но огромный класс задач с лямбдами становится громоздким и неудобным

Исходная версия rsync, :

Декораторы, которые ты так не любишь

я знаю что такое декораторы, но это не переиспользование имён, это врапперы.

Врапперы в виде декораторов появились от того что нормальных лямбд нету, были бы нормальные лямбды, то люди бы писали простые функции, принимающие другие функции как аргументы.

но поскольку анонимную функцию объявить по месту нельзя - вот и имаются с декораторами

$.ajax({
  url: url,
  success: function(data) {
     // bla
  }
);

подобный код на питоне невозможен (ибо нормальных лямбд нету), поэтому чтоб хоть где-то заменить лямбды на приемлемый код втащили декораторы:


import pytest
import os

@pytest.mark.skipif(os.getenv('DB', '') == '')
def test_db():
   # тестируем коннектор к БД

были бы лямбды - они бы сюда красиво легли, но их нет.

и соответственно в тестовой системе невозможно нормально написать блок сабтестов:


subtest 'Потестим некоторые мелочи' => sub {
   plan tests => 2;

   ok $user->foo, 'foo есть';
   is $user->bar, 'baz', 'bar правильно установлен';
}

и так далее.

да, декораторы местами позволяют скомпенсировать отсутствие лямбд, но огромный класс задач с лямбдами становится громоздким и неудобным