eval 和 assign 内部是怎么处理的,有人知道么
我自己也写了个简单的哈希函数,但是和用eval、assgin比起来速度慢了N个等级。可惜eval和assign本身也有缺陷,还要避免和源代码里自定义的变量重名,还有访问范围等等用的不太爽的地方
有人知道eval和assign内部是怎么处理数据的么? 除了AU3的作者,我想没人能知道两个函数的实现细节。至于变量名称重复的问题,可以使用Random函数给你要定义的变量名加一个随机前缀。 懂VC的话,自己看下吧。
///////////////////////////////////////////////////////////////////////////////
// Eval()
///////////////////////////////////////////////////////////////////////////////
AUT_RESULT AutoIt_Script::F_Eval(VectorVariant &vParams, Variant &vResult)
{
bool bConst = false;
if (g_oVarTable.isDeclared(vParams.szValue()))
{
Variant *pvTemp;
g_oVarTable.GetRef(vParams.szValue(), &pvTemp, bConst);
vResult = *pvTemp;
return AUT_OK;
}
else
{
SetFuncErrorCode(1); // Silent error even though variable not valid
vResult = "";
return AUT_OK;
}
} // Eval()
//////////////////////////////////////////////////////////////////////////
// F_Assign("variable", "data")
//
// Assign( "varname", "value" [,flag])
//
// binary flag: 0=any, 1=local, 2=global, 4=no create
//
// Assigns the variable in the first parameter to the data in the second parameter.
// This is a compliment to Eval()
//////////////////////////////////////////////////////////////////////////
AUT_RESULT AutoIt_Script::F_Assign(VectorVariant &vParams, Variant &vResult)
{
Variant *pvTemp;
int nReqScope = VARTABLE_ANY;
bool bCreate = true;
bool bConst = false;
if (vParams.size() == 3)
{
if (vParams.nValue() & 1)
nReqScope = VARTABLE_FORCELOCAL;
if (vParams.nValue() & 2)
nReqScope = VARTABLE_FORCEGLOBAL;
if (vParams.nValue() & 4)
bCreate = false;
}
// Get a reference to the variable in the requested scope, if it doesn't exist, then create it.
g_oVarTable.GetRef(vParams.szValue(), &pvTemp, bConst, nReqScope);
if (pvTemp == NULL)
{
if (bCreate)
g_oVarTable.Assign(vParams.szValue(), vParams, false, nReqScope);
else
vResult = 0; // Default is 1
}
else
*pvTemp = vParams;
return AUT_OK;
} // F_Assign()
{:face (301):}回复 3# sanhen
页:
[1]