2013-03-17 23 views
5

Tôi đang bối rối ... this static value bằng 5hành vi trường hợp nhầm lẫn với một java static int

user> java.awt.image.BufferedImage/TYPE_3BYTE_BGR 
5 

và một tuyên bố trường hợp nên làm việc như thế này

user> (case 5 
     5 "yes" 
     "huh?") 
"yes" 

nhưng tại sao nó hoạt động như thế này? Tại sao nó không khớp?

user> (case java.awt.image.BufferedImage/TYPE_3BYTE_BGR 
      java.awt.image.BufferedImage/TYPE_3BYTE_BGR "yes" 
      "huh?") 
"huh?" 

Trả lời

6

test-constant s trong biểu thức case không được đánh giá. Vì vậy, câu lệnh của bạn đang kiểm tra xem số 5 có giống như biểu tượng java.awt.image.BufferedImage/TYPE_3BYTE_BGR hay không. Vì chúng không có, nó rơi qua mệnh đề mặc định.

+0

Cảm ơn bạn. Điều đó dường như giải thích mọi thứ. Tôi cho rằng tôi cần dùng cond. Trừ khi bạn xảy ra để biết một cách để tránh rằng thêm chút cú pháp ... –

+0

Không, 'cond' là con đường để đi. – Barmar

+0

bạn có thể sử dụng mở rộng macro để đánh giá các ký hiệu thành hằng số tại thời gian biên dịch nếu bạn thực sự muốn .... có thể không đáng giá nhưng có thể hữu ích nếu đây là cú pháp bạn sẽ sử dụng nhiều. – mikera