teratail header banner
teratail header banner
質問するログイン新規登録
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

1回答

951閲覧

PowerShellでのクラス定義における、メソッドでの可変長引数の実現方法

nachi

総合スコア0

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2024/02/13 02:22

編集2024/02/15 03:11

0

0

実現したいこと

メソッドにおいて、型の定義された可変長引数を定義したいです。

発生している問題・分からないこと

メソッドで型を指定した可変長引数の受け取り方がわかりません。

どのようにすれば、メソッドに対して型付けしながら可変長引数を実現できるのでしょうか?

やりたいことのイメージはこんな感じです

powershell

1class Hoge { 2 [void] hoge([string]...$remaining) { 3 # ~ 略 ~ 4 } 5}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

$args から引数すべてを取得できることは調べました。
ですがクラスの利用者が見てわかりやすいように可変長引数であるということを明示したいため、この方法では不完全です。

メソッド内では $args も機能しませんでした。
可読性以前に実現できるか自体が怪しくなりました。

関数であれば param ステートメントを用いて実現できるようですが、メソッドでは使えないようでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

persuader

2024/02/22 16:03 編集

間違えたので削除しました。失礼しました。
guest

回答1

0

このような感じでしょうか。PowerShell ISEで動作することを確認しました。

powershell

1class Hoge { 2 [void] fuga([System.Collections.Generic.List[string]]$aaa) { 3 Write-Host $aaa 4 } 5} 6 7$a = New-Object Hoge 8 9$a.fuga(@('aaa','bbb')) 10$a.fuga(@('aaa','bbb','ccc'))

クラスとメソッド名を同じ(大文字小文字区別なし)にするとコンストラクタ扱いになってしまったので、fugaにしました。

こちらが参考にしたページです。
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_classes?view=powershell-7.4&WT.mc_id=WD-MVP-36880

投稿2024/02/22 16:03

persuader

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nachi

2024/03/05 03:01

ありがとうございます。 この方法は引数へリストを渡しているだけとなり、可変長引数ではないように見えます。 現在のところはこの方法と同様に配列を渡すことで回避しておりますが、実現したいのは次のような形での呼び出しです。 ```powershell $a = New-Object Hoge $a.fuga('aaa') $a.fuga('aaa', 'bbb') $a.fuga('aaa', 'bbb', 'ccc') ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問