我面臨的任務是允許用戶使用啓用了RTTI的已編譯類定義表達式。讓我以一種簡單的方式來說明。使用Delphi RTTI構建和評估表達式
TAnimal = class(TPersistent)
private
fWeight : Double;
fHeight : Double;
fName : string;
published
property Weight : Double read fWeight write fWeight;
property Height : Double read fHeight write fHeight;
property Name : string read fName write fName;
end;
,我有一個程序,這將與提供的表達式評估動物
用戶表達 (TAnimal.Weight * TAnimal.Height)/(TAnimal.Weight + TAnimal.Height)
現在,我可以使用RTTI場景中獲得TAnimal和獲得動物身高和體重的價值。但是,我如何評估用戶提供的表達式?
是否有任何機制可以用來在我的應用程序啓動時和運行時準備用戶表達式,只需發送動物實例以檢索值。用戶可以隨時更改表達式,應用程序必須評估表達式。
我正在使用Delphi XE3。
我會爲此使用JclExprEval。更重要的是,屬性是實例屬性而不是類屬性。 –
對於數學解析器,請參見['Delphi中的數學表達式解析器?'](http://stackoverflow.com/q/1326258/576719)。根據表達式的複雜程度,可以使用腳本語言,請參見['Delphi腳本庫](http://stackoverflow.com/q/226135/576719)。 –
@LURD但是,確實使用腳本庫引入了任何性能瓶頸?就像表達一直被解析一樣。 –