2009-06-05 37 views
5

Đây là câu hỏi tổng số newb. Sức mạnh yêu thương, nhưng tôi chắc chắn không nhận được một cái gì đó ở đây:thông số và chức năng quyền hạn

Tôi đang tạo một hàm đơn giản để tái tạo chuỗi x lần. Tôi đang gặp một số vấn đề lạ với tham số - nó dường như không nhận ra tham số thứ hai.
Khi tôi chạy hàm, nó trả về một chuỗi rỗng. Hơn nữa, tôi nghĩ rằng nó lumping 2 thông số vào 1. Dưới đây là mã của tôi:

 

Function Repeat-String([string]$str, [int]$repeat) { 
    $builder = new-object System.Text.StringBuilder 
    for ($i = 0; $i -lt $repeat; $i++) {[void]$builder.Append($str)} 
    $builder.ToString() 
} 

đầu tiên tôi chấm nguồn nó để tải nó:
. .\RepeatString.ps1
sau đó tôi Execute như thế này:
Repeat-string("x", 7)
tôi dự kiến ​​một chuỗi 7 x. Tôi có một chuỗi rỗng.

Tôi đã đi xung quanh một số chi tiết khác và tôi đã thay đổi vòng lặp "cho". Tôi đã thay thế phần "-lt $ repeat" bằng "-lt 5", để tôi nhận được số lần lặp lại cố định. Khi tôi đã làm điều đó, tôi có kết quả như sau (không có dấu ngoặc kép):
Lặp lại-String ("x", 7)
"x 7x 7x 7x 7x 7"
Có vẻ như nó được concatenating $ str và $ tham số lặp lại thay vì xử lý chúng như 2 tham số riêng biệt. Bất kỳ ý tưởng những gì tôi đang làm sai?

Trả lời

17

Vấn đề là bạn cần phải chuyển đổi mã của bạn để sau

Repeat-string "x" 7 

Trong PowerShell bất cứ lúc nào bạn đặt một nhóm các giá trị bên trong() 's bạn đang tạo một mảng. Điều này có nghĩa là trong mẫu của bạn, bạn thực sự truyền một mảng tới hàm như một tham số duy nhất.

+0

Cảm ơn! Tôi biết tôi đã làm điều gì đó ngu ngốc - chỉ là không chắc chắn những gì. – JMarsch

+0

@JMarsch, mọi người bị vấp phải ít nhất một lần. Nó thực sự gây phiền nhiễu: ( – JaredPar

+0

Tôi ghét điều này! Nhưng bạn đã quen với nó ... – Philippe

0

Tất nhiên JaredPar là đúng.

Tôi thích sử dụng được xây dựng trong chức năng phạm vi .. cho điều này quá: (chú ý tôi bắt đầu từ 1 thay vì 0)

Function Repeat-String([string]$str, [int]$repeat) { 
    $builder = new-object System.Text.StringBuilder 
    1..$repeat | %{ [void]$builder.Append($str) } 
    return $builder.ToString() 
} 

Repeat-string "x" 7 
+0

Cảm ơn - không biết về chức năng phạm vi. Tôi sẽ phải phù hợp với một cuốn sách trên powershell vào danh sách đọc của tôi. (Tôi đoán tại thời điểm này, tôi cũng có thể xem/chờ đợi cho một cuốn sách PowerShell 2.0) – JMarsch

6

Đây là một cách tốt hơn, chỉ cần nhân (bất kỳ) chuỗi của bạn bằng cách N lặp đi lặp lại :

PS > function Repeat-String([string]$str, [int]$repeat) { $str * $repeat } 
PS > Repeat-String x 7 
xxxxxxx 

PS > Repeat-String JMarsch 3 
JMarschJMarschJMarsch 
+0

Mỗi điều mới tôi tìm hiểu về powershell chỉ cho tôi thấy nó mát như thế nào. Cảm ơn bạn đã chia sẻ, Shay +1 – JMarsch

+0

PowerShell ROCKS ;-) –

+0

Theo một cách nào đó, bình luận của Shay Levy cho thấy rằng chúng ta chỉ có thể sử dụng tính năng "nhân chuỗi" ** thay vì ** viết một hàm do người dùng định nghĩa. –

6

một lưu ý bang ngạn ngữ Trung Quốc:

"Hãy cho ta một con cá và y ou cho anh ta ăn một ngày. Dạy một người đàn ông cá và bạn nuôi sống anh ta một đời."

Đối với quốc tế có đầu óc trong anh em, ban đầu là 授人以魚不如授人以漁 và quốc ngữ Hán Việt là Shòu rén yǐ yú bùrú shòu rén yǐ yú. (Tôi đã được học nói tò mò tôi thấy biểu hiện Pinyin ở trên dường như là một bí ẩn, nhưng đó là một câu chuyện cho một thời điểm khác ... :-)

Bây giờ đến thời điểm của tôi : JMarsch đã gặp phải một lỗ hổng PowerShell phổ biến chịu trách nhiệm đi lên bất kỳ ai từng sử dụng ngôn ngữ "thông thường" và @JaredPar cung cấp độ phân giải chính xác. Tôi gửi, mặc dù, câu trả lời đó là giống như tát xuống một con cá trước mặt bạn!

Chỉ cần xuất bản trên Simple-Talk.com, Down the Rabbit Hole: A Study in PowerShell Pipelines, Functions, and Parameters thảo luận về lỗ hổng trên cùng với nhiều sắc thái khác của giao diện gọi điện. Ví dụ: một phần của bài viết của tôi bao gồm sự khác biệt tinh tế giữa tất cả các cuộc gọi sau đây với chức năng f, hầu hết trong số đó sẽ không mang lại những gì bạn mong đợi.

f(1,2,3) 
f (1,2,3) 
f 1,2,3 
f (1 2 3) 
f 1 2 3 

Tìm bản tải xuống PDF của tài liệu tham khảo wallchart tiện dụng kèm theo bài viết.

Dưới đây là một hình ảnh thu nhỏ: PowerShell Functions Quick Reference

(Oh, và bạn có thể muốn cũng kiểm tra danh sách hài hước spin-offs của quote cổ điển trên tại Give a man a fish...)

+0

Bài viết hay. Cám ơn vì cái này. – crush

+0

Cá phải làm gì với nó? :) – bgmCoder

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