Я пытался найти решение сегодня днем, но пока у меня только частичный успех...
Вот мой код:
class Animal {
[int] $numOfLegs = 0;
[int] $numOfEyes = 2;
[scriptblock] $dog = {
class Dog {
[int] $numOfLegs = 4
[int] getLegs(){ return $this.numOfLegs; }
[int] getEyes(){ return $numOfEyes; }
}
return [dog]::new()
}
}
(С помощью этого можно создать экземпляр класса Dog):
$mypetdog = & ([animal]::new().Dog)
По сути, моя идея заключалась в том, чтобы попытаться заставить блоки сценариев действовать как замыкания, чтобы можно было вызвать каждое определение «подкласса», содержащееся в Animal (и при этом иметь доступ к его родительской области). Так, например, когда getEyes() выполняется для объекта Dog, теоретически он вернет число 2. Однако это не сработало, потому что я думаю, что блок сценария не может видеть за пределами своей собственной области видимости (когда он определен в классе).
Итак, когда я делаю это:
$mypetdog.getLegs()
он правильно возвращает 4, но когда я это делаю:
$mypetdog.getEyes()
Powershell понятия не имеет, что такое переменная $numOfEyes, и впоследствии выдает ошибку, поскольку переменная не определена в классе.
У кого-нибудь есть решение для имитации подклассов в PowerShell без использования типа добавления?
class tree{class node{}}
, где узел не является специализированным типом дерева, но этот конкретный тип узла сам по себе не имеет никакого значения, кроме как в контексте класса родительского дерева. - person Gregor y   schedule 09.05.2020