2015-11-20 16 views
6

Để tránh các câu lệnh if lồng nhau và để cải thiện khả năng đọc, tôi muốn tạo một tuyên bố switch(true){ ... } trong Coldfusion. Tôi sử dụng này thường trong php, nhưng khi tôi cố gắng này trong Coldfusion, tôi nhận được lỗi sau lúc khởi tạo:chuyển đổi (true) với các trường hợp động trong coldfusion?

Template lỗi

Biểu thức này phải có một giá trị không đổi.

này xảy ra khi một trường hợp chuyển đổi sử dụng một biến trong điều kiện của mình, như:

//this example throws the error 
switch(true){ 
    case foo == 1: 
     writeOutput('foo is 1'); 
    break; 
} 

Sử dụng một công tắc (true) {...} tuyên bố với giá trị không đổi (tùy theo từng lỗi giải thích) làm làm việc:

//this example doesn't throw the error 
switch(true){ 
    case 1 == 1: 
     writeOutput('1 is 1'); 
    break; 
} 

Có cách nào để nhận câu lệnh đầu tiên hoạt động trong Coldfusion không? Có lẽ với một đánh giá của các biến hoặc một số trick, hoặc là điều này một không xác định đi trong Coldfusion?

+0

Không. Trừ khi họ đã thay đổi hành vi trong CF11, nó phải là một hằng số hoặc [được viết theo cách sao cho nó phù hợp với quy tắc không đổi] (http://stackoverflow.com/questions/31910902/coldfusion-cfscript-switch-case- trường hợp-giữa-một-phạm vi). – Leigh

Trả lời

2

Tóm lại: không. Giá trị trường hợp cần phải là một cái gì đó có thể được biên dịch thành giá trị không đổi. 1==1 có thể, vì nó chỉ là true. foo == 1 không thể, vì foo chỉ có sẵn khi chạy.

về cơ bản những gì bạn mô tả là cấu trúc if/else if/else dù sao đi nữa, do đó, chỉ cần sử dụng một trong số đó.

+0

viết bằng if/else if/else làm cho nó lộn xộn một chút, vì nó liên quan đến một tấn quy tắc kinh doanh dựa trên giá trị tối thiểu và tối đa, nhưng tôi đoán đây là cách duy nhất sau đó – jan

+0

Có thể đáng xem nếu có một cách khác để tiếp cận vấn đề đầy đủ. Nếu bạn có hơn 500 trường hợp (theo nhận xét của bạn về câu trả lời của Miguel), sau đó mã là một chút mùi dù sao đi nữa. Đây có thể là một điều gì đó mà bạn đã biết, và hiện tại không ở vị trí để giải quyết, tôi nhận ra điều đó. Đây chỉ là một quan sát, và không có nghĩa là để được snippy. –

+0

Tôi cần hơn 500 trường hợp nếu tôi sử dụng giải pháp của câu trả lời thứ hai, trong đó giá trị của 'case' là một giá trị không đổi. Tôi không thực sự có 500 trường hợp cá nhân :-) – jan

2

Như Adam và Leigh đã chỉ ra, các giá trị trường hợp cần phải có một số hằng số. Tôi không chắc chắn trường hợp sử dụng thực tế của bạn là gì nhưng bạn có thể làm như sau:

switch(foo){ 
    case 1: 
     writeOutput('foo is 1'); 
    break; 
    case 2: 
     writeOutput('foo is 2'); 
    break; 
    case 3: 
     writeOutput('foo is 3'); 
    break; 
    case 4: 
    case 5: 
    case 6: 
     writeOutput('foo is 4 or 5 or 6'); 
    break; 
    default: 
     writeOutput("I do not have a case to handle this value: #foo#"); 
} 
+0

Trong trường hợp của tôi, đây không phải là một lựa chọn. Tôi phải viết 500 điều kiện – jan

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