2009-07-07 23 views
5

tôi đã tạo ra một mô-đun tùy chỉnh (hiện chỉ định nghĩa một lớp ngoại lệ mới), và đặt nó dưới lib/lib_th.rbXác định ngoại lệ tùy chỉnh trong một mô-đun trong Rails

module LibTH 
    module Error 
     IDNotFound = Class.new 
    end 
end 

Tôi không cần phải yêu cầu/bao gồm mô-đun trong mã của tôi, vì nó sẽ được tải tự động, vì nó tuân theo các quy tắc đặt tên thông thường.

Nhưng khi tôi cố gắng và nâng cao IDNotFound ngoại lệ đâu đó trong mã của tôi:

res.size == 0 ? raise LibTH::Error::IDNotFound : res 

tôi nhận được lỗi follwoing:

SyntaxError (/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected tCONSTANT, expecting kDO or '{' or '(' 
    res.size == 0 ? raise LibTH::Error::IDNotFound : res 
          ^
/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected ':' 
    res.size == 0 ? raise LibTH::Error::IDNotFound : res 
                ^): 
app/controllers/treasure_hunts_controller.rb:50:in `show' 

Điều kỳ lạ là tôi gặp phải không có vấn đề cố gắng để nâng cao ngoại lệ trong script/console:

>> raise LibTH::Error::IDNotFound 
LibTH::Error::IDNotFound: LibTH::Error::IDNotFound 
from (irb):70 

Tha nks!

Trả lời

2

Nevermind, tôi giải quyết vấn đề bản thân mình:

thay vì sử dụng câu lệnh if ? then : else, tôi mở rộng nó thành một:

raise LibTH::Error::IDNotFound if res.size == 0 
res 

Có vẻ như bạn không thể sử dụng một giá trị không đổi (như là một lớp tên) trong tuyên bố số if giống như C, do đó:

syntax error, unexpected tCONSTANT, expecting kDO or '{' or '(' 

Cảm ơn bạn!

2

Hằng số không phải là vấn đề, bạn chỉ gặp lỗi cú pháp khi tăng. Nếu bạn thay đổi nó thành:

res.size == 0 ? (raise LibTH::Error::IDNotFound) : res 

Nó sẽ hoạt động. Tuy nhiên, hình thức bạn đã sửa là tốt hơn.

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