2013-11-22 22 views
1

我一直試圖通過將一些外部Erlang代碼放入我的Tsung配置文件(tsung.xml)並設置一些動態來消除構建過程中的一些複雜問題變量,但已經發現一些表達式似乎不能正常工作。當嘗試使用If語句,個案或甚至函數定義(funs或normal)時,或者Tsung抱怨帶有「unexpected_char」消息(但沒有提及可能的char),或者對於後者,Erlang返回一個「語法錯誤之前'[]'「解析錯誤。如果整個函數表達式的僅僅是如果表達發生Tsung.xml中的嵌入式Erlang動態變量無法解析If表達式

<setdynvars sourcetype="eval" 
       code="fun({Pid,DynVars}) -> 
         {Var_Scale, ScaleUp} = {3, 100}, 
         Random=random:uniform() * 100 * ScaleUp, 
         Compare=round(Var_Scale * ScaleUp), 
         if 
           Random =< Compare -> 
            Return = 1; 
           true -> 
            Return = 0 
         end, 
         Return. 
         "> 
      <var name="someVariable" /> 

相同的結果:

<setdynvars sourcetype="eval" 
       code="fun({Pid,DynVars}) -> 
         if 
          1 < 2 -> Return = 2; 
          true -> Return = 3 
         end. 
         "> 
      <var name="anotherVariable" /> 
     </setdynvars> 

和用於內聯或匿名功能

<setdynvars ... 
    Compare=round(Var_Scale * ScaleUp), 
    Fn = fun() -> a 
    end. 
"> 

這導致上述解析錯誤。

我對Erlang和Tsung很陌生,所以也許我誤解了這些命令需要如何構造,或者tsungu需要提供什麼Tsung的eval。它似乎使用標準的Erlang掃描,解析和eval方法,所以我想它肯定支持分支操作和函數。

所以我的問題本身歸結爲:這段代碼(語法)正確和不聰根本不支持這一點,其次,是有這樣做的更好或更地道的正確方法?

回答

3

我猜想對<>字符被嵌入到XML屬性中感到不滿。嘗試輸入&lt;&gt;。此外,與命名功能fun需要一個匹配end令牌:

<setdynvars sourcetype="eval" 
       code="fun({Pid,DynVars}) -&gt; 
         if 
          1 &lt; 2 -&gt; Return = 2; 
          true -&gt; Return = 3 
         end 
        end. 
         "> 
      <var name="anotherVariable" /> 
     </setdynvars> 
+0

啊,當然!我沒有想過XML解析器本身是一個潛在的問題,因爲 - >的初始代碼=函數定義解析否則。也看起來我沒有很好地閱讀這本手冊,對於匿名函數來說已經足夠了。謝謝! – user3022071