переменная $ it в Gradle: Справочник: Gradle in Action book - PullRequest
0 голосов
/ 20 марта 2019

Проходя по книге, я наткнулся на эту строку

Groovy автоматически предоставляет неявную переменную, названную ей, для указания индекса итерации цикла.

из Gradle вКнига действий, глава 2 Листинг 2.1

В строке указано, что $ it представляет индекс итерации цикла.Однако, когда я пытаюсь добавить $it в оператор println задачи yayGradle0 / 1/2, она печатает задачу, а не индекс.Я запутался в этом поведении.Пожалуйста, руководство.

3.times{
    task "yayGradle$it" <<{
        println 'Gradle rocks--->>>'+"$it"
    }
}

Вывод после запуска задачи yayGradle0:

Gradle rocks--->>>task ':yayGradle0'

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Вы используете переменную it в контексте, отличном от , представленном в книге .В вашем случае вы работаете в контексте задачи Closure.Следовательно, it представляет другой объект, экземпляр org.gradle.api.Task.Было бы полезно сослаться на Стратегии делегирования закрытия .Также см. Приложение B в книге .

1 голос
/ 20 марта 2019

(редактировать после перечитывания)

it - индекс в цикле.

Из groovy shell

  3.times  {
    println "${it}"
  }

0
1
2

В вашем коде есть другое замыкание, оно становится переменным для этого замыкания (которое является именем задачи)

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

3.times{ counter->
    task "hello${counter}" <<{
        println 'Gradle rocks--->>>'+" ${it}  ${counter}"
    }
}

$ gradle hello2 получает следующий вывод.

Задача: hello2 Gradle rock --- >>> task ': hello2' 2

ссылки

новичок заводные крышки

...