2011-12-05 55 views
3

小背景:我正在開發一個項目,將另一種腳本語言的webapp轉換爲ColdFusion。我遇到的一個問題是舊技術有一些功能名稱與CF中的功能相同,但工作方式稍有不同。不幸的是,在大多數情況下,我需要舊功能,所以我打算編寫自己的功能。ColdFusion用戶定義函數名稱的有效字符是什麼?

爲了減少代碼轉換過程中的麻煩,我計劃在每個函數前加一個函數名中通常不用的字符,例如$val()

我知道$_在函數名中是有效的。我可以使用其他任何角色嗎?我問,因爲我知道那裏的一些框架使用這個約定,我不想在未來的開發中與任何這些約定發生衝突。以這種方式使用多個字符是不合理的,例如,$_val()

+0

我相信函數名被限制爲以下規則: [isJavaIdentifierStart](http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html#isJavaIdentifierStart%28char%29)和[isJavaIdentifierPart](http://docs.oracle.com的.com/JavaSE的/ 1。 5.0/docs/api/java/lang/Character.html#isJavaIdentifierPart%28char%29) – Leigh

+0

有isValid(yourFuncNAme,「variableName」),但我敢打賭,它只檢查第一個字符是alpha還是字母數字 – Henry

+1

IIRC isValid __「variableName」__,「functionName」)同樣允許'$'和'_'。所以它是相似的,但不像處理重載的'isJavaIdentifierStart(codePoint)'和'isJavaIdentifierPart(codePoint)'方法那樣處理unicode。 – Leigh

回答

7

似乎對我來說合理的使用$ _作爲前綴。當然,你也可以考慮給你的函數一個自定義的'命名空間',通過包含在像'UDF'這樣的自定義範圍結構中,產生一個名爲'UDF.val()'的函數。此外,您可以將它們一起打包在CFC中,並將它們作爲組件方法訪問。無論哪種方式,您都可以避免名稱衝突。

編輯

要測試剛剛作出關於相同名稱的內置功能,自定義函數的評論,我做了一個小測試,看看這是不是真的。看來,你實際上可以構建具有相同的名稱用作內置的,如果他們是一個自定義的範圍內:

<cffunction name="foo"> 
    <cfreturn "bar"> 
</cffunction> 


<cfset udf = {}> 

<cfset udf.IsDefined = foo> 

<cfoutput>#udf.IsDefined()#</cfoutput> 

這段代碼輸出「欄」。

或者,如果你喜歡的CFC方法:

foo.cfc

component { 
    function IsDefined() 
    { 
    return "blah"; 
    } 

} 

而且調用代碼:

<cfset udf2 = createObject("component", "foo")> 
<cfoutput>#udf2.isDefined()#</cfoutput> 
+0

嗯,是的,我正在計劃類似的東西,但我仍然不能使用與內置CF函數同名的函數名稱。 – ale

+0

編輯迴應您的評論 –

+1

公平夠了,很高興知道。可能比它的價值更麻煩,但我會保留它作爲一個選項。謝謝。 – ale

相關問題