Как кратко связать строки в Tcl?

Каждый скрипт PowerShell полностью разбирается до того, как будет выполнен первый оператор в скрипте. Неразрешимый токен имени типа внутри определения класса считается ошибкой синтаксического анализа. Чтобы решить вашу проблему, вам необходимо загрузить свои типы до того, как будет проанализировано определение класса, поэтому определение класса должно быть в отдельном файле. Например:

Main.ps1:

Add-Type -AssemblyName System.Printing
Add-Type -AssemblyName ReachFramework

. $PSScriptRoot\Class.ps1

Class.ps1:

using namespace System.Management
using namespace System.Printing

Class PrinterObject
{
    [string]$Name
    [PrintServer]$Server
    [PrintQueue]$Queue
    [PrintTicket]$Ticket
    [ManagementObject]$Unit
    [bool]$IsDefault
}

Другая возможность была бы вставлять Class.ps1 в виде строки и используйте Invoke-Expression для его выполнения. Это задержит парсинг определения класса до времени, в котором доступны типы.

Add-Type -AssemblyName System.Printing
Add-Type -AssemblyName ReachFramework

Invoke-Expression @‘
    using namespace System.Management
    using namespace System.Printing

    Class PrinterObject
    {
        [string]$Name
        [PrintServer]$Server
        [PrintQueue]$Queue
        [PrintTicket]$Ticket
        [ManagementObject]$Unit
        [bool]$IsDefault
    }
’@
21
задан WilliamKF 16 September 2009 в 01:43
поделиться

3 ответа

Вы можете вставлять команды в строку с двойными кавычками без необходимости во временной переменной:

set result "[myFoo $arg][myBar $arg]"
29
ответ дан 29 November 2019 в 20:25
поделиться

просто напишите это как слово без лишних пробелов:

[myFoo $arg][myBar $arg]

Tcl видит это как одно слово после замены, независимо от результата двух подкоманд.

4
ответ дан 29 November 2019 в 20:25
поделиться

Если вы делаете это много раз, в цикле или через некоторый промежуточный код, вы также можете рассмотреть:

set result ""
append result [myFoo $arg]
append result [myBar $arg]
append result [myBaz $arg]
11
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

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