2009-08-05 21 views
10

Tôi chắc chắn rằng tôi đã đọc ở đâu đó rằng có một cách dễ dàng để chuyển các tham số được đặt tên từ một hàm gọi đến một hàm được gọi mà không đặt tên rõ ràng và chỉ định từng tham số.Có cách nào đơn giản để chuyển các tham số * có tên * PowerShell cụ thể qua trực tiếp đến một hàm được gọi không?

Đây không chỉ là việc sử dụng lại vị trí; Tôi quan tâm đến trường hợp tên của các tham số được truyền là giống nhau trong một số trường hợp, nhưng không phải trong các trường hợp khác.

Tôi cũng nghĩ rằng có một cách không phụ thuộc vào vị trí.

function called-func { 
    param([string]$foo, [string]$baz, [string]$bar) 
    write-debug $baz 
    write-host $foo,$bar 
} 

function calling-func { 
    param([int]$rep = 1, [string]$foo, [string]$bar) 
    1..$rep | %{ 
     called-func -foo $foo -bar $bar -baz $rep ## <---- Should this be simpler? 
    } 
} 

calling-func -rep 10 -foo "Hello" -bar "World" 

Phương pháp sẽ là gì và có liên kết?

Tôi nghĩ đó có thể là Jeffrey Snover, nhưng tôi không chắc chắn.

+0

Tôi đã làm * một số * googling đầu tiên, nhưng kể từ khi tôi không nhìn thấy câu trả lời đã có ở đây trên SO, tôi muốn nhận được nó ở đây quá anyway. –

+0

Vì vậy, sau khi một số googling, tôi nghĩ rằng các tính năng tôi đã nghĩ đến đã làm với 'splatting' và đi qua các thông số chuyển đổi. Tôi sẽ đăng một câu trả lời sau khi tôi nhận được tất cả các chi tiết. –

Trả lời

5

Bart de Smet có một lời giải thích * vĩ đại của tham số splatting trong Windows PowerShell 2.0 Feature Focus - Splat, Split and Join.

* Như thường lệ - nếu bạn là người đam mê PowerShell, bạn nợ anh ấy một điểm trong nguồn cấp dữ liệu RSS của bạn.

+1

đẹp. Điều này có vẻ cụ thể để powershell v2 btw. –

+2

Chính xác. Trong v1 the -param: Cú pháp giá trị $ là tốt như nó được. –

1

Làm thế nào về

called-func $foo $bar 
+0

Câu trả lời hay .. Tôi sẽ sửa đổi câu hỏi một chút để cho thấy sự khác biệt ... –

2

Vâng, tôi nghĩ rằng tôi đã nhầm lẫn một blog post Tôi đã đọc về các thông số chuyển đổi. Theo như tôi có thể nói cách tốt nhất là chỉ cần tái sử dụng các thông số như sau:

called-func -foo:$foo -bar:$bar 
+1

Cú pháp đại tràng là bắt buộc khi 'foo' là tham số chuyển đổi. Nếu bạn chuyển '-foo $ foo' thì' gọi-func' sẽ nghĩ rằng nó nhận được hai đối số (công tắc 'foo' và một giá trị' $ foo'). –

+0

Vâng, đó là chính xác, cảm ơn đã chỉ nó ra @emddudley –

3

Trong PowerShell v2 (mà phải thừa nhận là bạn có thể không sẵn sàng chuyển sang chưa) cho phép bạn vượt qua cùng các thông số mà không biết về chúng trước thời hạn:

called-func $PSBoundParameters 

PSBoundParameters là từ điển của tất cả các thông số đã được cung cấp cho chức năng của bạn. Bạn có thể xóa các tham số bạn không muốn (hoặc thêm tôi giả sử).

+0

Vâng, tôi không thể đợi đến khi v2 chuyển sang sản xuất :) –

Các vấn đề liên quan