2011-06-01 18 views

Trả lời

6

Một tuyên bố if có lẽ sẽ phù hợp hơn cho mã của bạn, vì bạn không có một phạm vi/giá trị dứt khoát, nhưng thay vì chỉ là một lớn hơn-hơn:

if ARGV.length == 0 
    abort "Error 1" 
elsif ARGV.length > 2 
    abort "Error 2" 
end 
15

Vâng, nó không hoạt động vì nó không phải là cú pháp ruby ​​hợp lệ. Tuy nhiên, bạn có thể làm điều này:

x = 15 
case x 
    when 0..9 then puts "good" 
    when 10..12 then puts "better" 
    when 13..200 then puts "best" 
    else 
    puts "either great or poor" 
end 
+3

Tôi làm cách nào để sửa mã cụ thể của mình? Cảm ơn. – emurad

+0

Yours là câu trả lời duy nhất có ý nghĩa với tôi - thật sự thành ngữ và thanh lịch. Đó là những gì tôi đã sử dụng là tốt. –

35

Cú pháp ruby ​​không hợp lệ.

gì bạn cần là

case 
    when ARGV.length == 0 
    abort "Error 1" 
    when ARGV.length > 2 
    abort "Error 2" 
end 

Khi bạn viết case x, một phần quan trọng bạn cần phải hiểu là ruby ​​có x và sau đó áp dụng một so với đối số hoặc biểu thức mà bạn chèn trong mệnh đề when.

Dòng nơi bạn nói when x >2 đọc để ruby ​​như:

if ARGV.length == > 2 

Khi bạn loại bỏ một đối tượng cụ thể từ case báo cáo, bạn có thể áp dụng điều kiện trong when báo cáo.

+1

Ruby 1.8.7 + irb 0.9.5 báo cáo (irb): 4: lỗi cú pháp, bất ngờ '>' với tập lệnh gốc của OP. Câu trả lời của tôi bao gồm một bộ chỉ dẫn viết lại đang hoạt động. –

+0

Tôi đã thử nó trong một tập tin .rb, nó sẽ hiển thị một lỗi cú pháp sau đó. * & ^^% &^IRB. – Zabba

+0

Trên thực tế những gì gây phiền nhiễu ở đây là tôi không thể tìm thấy tài liệu dứt khoát để hỗ trợ khiếu nại của tôi, tôi chỉ xảy ra * biết * câu trả lời. rubyspec.org và ruby-doc.org không hữu ích. Các thông số cú pháp ngôn ngữ tôi có thể tìm thấy dường như không bao gồm trường hợp này. –

19

Sử dụng 1.0/0.0 để có được vô cực, mà sửa chữa đang @ mosch của:

case ARGV.length 
    when 0 
    raise "Too few" 
    when 3..(1.0/0.0) 
    raise "Too many" 
end 

Bạn không cần phải là Chuck Norris chia bởi một dấu chấm động không.

+9

Thay vì '(1.0/0.0)' chúng ta có thể sử dụng 'Float :: INFINITY', được thêm vào ruby 1.9.3. –

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