2009-07-13 36 views
10

Có cách nào để thực hiện các toán tử bậc ba trong Vận tốc không? Đây là những gì tôi muốn làm:toán tử điều kiện trong Velocity

#set ($name = ($args.get(0) == "") ? "default" : $args.get(0)) 

Thay vì chunky if-else

#if ($args.get(0) == "") 
    #set ($name = "default") 
#else 
    #set ($name = $args.get(0)) 
#end 

Bất kỳ ý tưởng?

Trả lời

6

Trải nghiệm và đọc VTL Reference không có cách nào để thực hiện việc này. Nếu bạn có rất nhiều bài tập như thế này, bạn có thể xem xét việc xác định velocimacro của riêng bạn để thử và tránh lặp lại nếu có.

Ví dụ, nếu macro chỉ in một chuỗi duy nhất bạn có thể làm như sau:

#set ($name = "#condOpt($args.get(0), "default")") 

Các dấu ngoặc kép quanh cuộc gọi vĩ mô rất quan trọng vì đó là việc RHS của #set được phân tách.

+0

Có cách nào để có được một macro để hành động như một chức năng? Vì vậy, nó sẽ trả về một biến? Vì vậy, tôi có thể làm '#set ($ name = condOpt ($ args.get (0)," default "))' Nếu tôi làm macro thực hiện kiểm tra '$ args.get (0)' để xem nó trống hoặc không .. – peirix

+0

Nếu macro chỉ in một chuỗi, bạn có thể đặt nó thành tên. Xem chỉnh sửa cho câu trả lời của tôi. – Mark

+0

Yup. Đó là những dấu ngoặc kép xung quanh cuộc gọi macro bắt được tôi. Đã sửa và đang hoạt động. Cảm ơn (: – peirix

2

tôi đã kết thúc làm như bạn nói, Mark:

#macro(condOp $check, $default) 
    #if ($check == "") 
     $default 
    #else 
     $check 
    #end 
#end 

Và sau đó tôi có thể gọi nó như vậy:

#set ($name = "#condOp($args.get(0), 'default')") 
+0

Bạn đã từng thêm điều này ngay khi tôi đang chỉnh sửa câu trả lời của mình bằng cùng một ví dụ !! – Mark

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