簡體   English   中英

如何將速度上下文變量用作局部變量

[英]How to work with velocity context variable as local variable

在速度上我有一個問題。 讓我清楚地解釋一下我在課堂上聲明的內容

private final static int MAX_TOOL_TITLE_LENGTH = 20;

//Putting into context
context.put("maxToolTitleLength","MAX_TOOL_TITLE_LENGTH");

現在在vm文件中,我將上下文變量值設置為不同

#if(true)
  #set($maxToolTitleLength=99) 
#end

在vm文件的上述各行中,我將值設置為99.i不想將此值設置為上下文變量。我想通過if僅將變量的范圍限制為。 之后,如果我不想獲得99.it的值,則它仍與上下文中的值相同。 是否可以通過其他任何方式提高速度?

提前致謝。

其實一種方法來引入速度的局部變量,雖然它是有點出人意料:

#foreach ($maxToolTitleLength in [99])
...text that uses this $maxToolTitleLength definition...
#end
## now $maxToolTitleLength is back to whatever value it had before

[99]是具有一個元素99的列表,因此這是一個執行一次的循環。 在循環內, $maxToolTitleLength的值為99 您也可以在循環內#set ($maxToolTitleLength = $anotherValue) #foreach之前的值將在循環后恢復。

@ user2624542發現的#foreach-hack用於生成本地作用域。 但是,至少在相當老的Polarion Velocity 1.5中,宏內部的行為不同於外部。

在宏內部,作用域范圍適用於現有變量(在全局上下文中),但不適用於未定義的變量。

$foo ## undef
#foreach ($foo in [99])
  $foo ## 99
  #set($foo=100)
  $foo ## 100
#end
$foo ## undef

#set($foo=0)
$foo ## 0
#foreach ($foo in [99])
  $foo ## 99
  #set($foo=100)
  $foo ## 100
#end
$foo ## 0

而在宏內

#macro(bar)
  $foo ## undef
  #foreach ($foo in [99])
    $foo ## 99
    #set($foo=100)
    $foo ## 100
  #end
  $foo ## 100 NOT undef
#end

$foo ## undef
#bar()
$foo ## 100 NOT undef

#macro(bar2)
  $foo ## 0
  #foreach ($foo in [99])
    $foo ## 99
    #set($foo=100)
    $foo ## 100
  #end
  $foo ## 0
#end

#set($foo=0)
$foo ## 0
#bar2()
$foo ## 0

不能更改上下文對象的值並使此更改僅在本地進行。 我不明白為什么您不為此簡單地在模板中使用新變量?

#if (true)
  #set($thisTitleLength=99) 
#end

或者,如果您確實需要為此使用上下文變量,則在完成要更改其值的塊之后,只需還原上下文變量即可:

#if (true)
  #set($maxToolTitleLength=99) 
  ## Do whatever you want with the new value
  ...
  ## Now restore its value
  #set($maxToolTitleLength=20)
#end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM