Как получить переменные в порядке их объявления - PullRequest
1 голос
/ 27 апреля 2010

Можно ли заставить Get-Variable всегда возвращать переменные в порядке, в котором они были объявлены?

 & {
     $c = 2
     $b = 1
     $a = 0

     get-variable -scope local
   }

Ответы [ 2 ]

1 голос
/ 02 мая 2010

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

 &{
   $h_one = { "one" }
   $h_two = { "two" }
   $h_three = { "three" }
   $h_four = { "four" }

   $byStartLines= @{}
   get-variable -name "h_*" -scope local | % { $byStartlines[($_.value.startposition.startline)] = $_ }
   $order = ([int[]] $byStartLines.keys) | sort
   $order | %{ $byStartLines[$_].name }
 }

Ситуация усложняется, если вы объявляете несколько блоков скриптов в одной строке, но в этом суть.

0 голосов
/ 27 апреля 2010

Я думаю, что ответ будет отрицательным, с оговоркой.

Поскольку в записи variable:name нет ничего (получите это с помощью dir variable:name), которое указывало бы, когда был создан $name.

Предостережение: пользовательский хост PSH мог бы что-то делать, проверяя конвейеры в пространстве выполнения перед выполнением (но это, вероятно, потребует написания вашего собственного анализатора и, вероятно, все равно не будет обрабатывать invoke-expression).

(Лучший ответ возможен, если вы объясните, почему вы этого хотите.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...