2013-06-13 24 views
5

Tôi muốn biết nếu có thể xây dựng tên biến thành vận tốc động.xây dựng tên biến động theo vận tốc

ví dụ: giả sử tôi có 6 biến thành mẫu tốc độ [name1, name2, name3 .. name6] Tôi muốn xuất chúng. Vì vậy, tôi đang tìm kiếm một cái gì đó như:

#foreach ($counter in [1..6]) 
${name${counter}} 
#end 

là nó có thể bằng cách nào đó?

Trả lời

9

Có thể sử dụng #evaluate chỉ:

#evaluate ('$name1') 

#set ($d = '$') 
#foreach ($i in [1..6]) 
    #set ($varName = "${d}name${i}") 
    #evaluate($varName) 
#end 
+0

cảm ơn. tốt đẹp. không biết rằng. –

+0

@Sergiu Dumitriu Làm thế nào để đặt đầu ra của 'đánh giá' trong một var? –

+0

@AamirAdnan '#set ($ value =" #evaluate ($ varName) ")' hoặc, vì bạn có thể đánh giá bất kỳ tập lệnh hợp lệ nào: '' '#set ($ name1 = 'a1') #set ($ name2 = 'b2') #set ($ name3 = 'c3') #set ($ d = '$') #set ($ h = '#') #foreach ($ i trong [1..3]) # set ($ expr = "$ {h} đặt ($ {d} giá trị = $ {d} tên $ {i})") #evaluate ($ expr) $! Giá trị #end '' ' –

5

Bạn có thể xây dựng một bản đồ và xây dựng tên tuổi trong những chìa khóa để lấy các giá trị bạn muốn:

#set($map = {"${name}1":'value1', "${name}2":'value2'}) 

#foreach ($counter in [1..6]) 
    #set($key = "${name}$counter") 
    $map.get(${key}) 
#end 
+0

bản đồ là tốt, cảm ơn. –

1

Đây là một thủ thuật để đặt biến vận tốc với tên động.

Nếu bạn quản lý để điều chỉnh bối cảnh tốc độ trước trong mã java như thế này:

VelocityContext context = new VelocityContext(paramsMap); 
context.put("all", paramsMap); 

sau đó nó sẽ có thể để xác định vars động trong mẫu như thế này:

#set($dynamicDef = "varName=varValue") 
#set($dynamicName = $dynamicDef.substring(0, $dynamicDef.indexOf('='))) 
#set($dynamicValue = $dynamicDef.substring($dynamicDef.indexOf('=')).substring(1)) 
## create var with dynamic name 
$all.put($dynamicName, $dynamicValue) 

và sử dụng chúng sau này như thế này:

#if ($varName) 
varName=$varName ## prints varName=varValue 
#end 
Các vấn đề liên quan