2015-10-22 19 views
1

我正在尋找使用InterSystems提供的Callin API來創建應用程序,但我需要使用的一些現有M代碼依賴於假定的變量。如何使用Callin API使用假定變量?

如何向我打電話的標籤提供這種狀態?

(需要注意的是,如果我添加變量作爲正式的參數,它會得到new「d和其他標籤將停止工作。)


我想建立一個制度,我可以插入在另一種語言代碼潛在 '夾持' 由M代碼:

s assumed="variable" 
s x=$$DoSomethingFunky("FunctionName","arg1","arg2","arg3") 

; some other file that's being executed by my Callin API program 
FunctionName(a1, a2, a3) -> ", ".join(a1, a2, a3, assumed, DoSomethingFunkier(a2)) 

; back to M 
DoSomethingFunkier(param1) q "(hello, "_param1_" and "_assumed_")" 

所以x上面會"arg1, arg2, arg3, variable, (hello, arg2 and variable)"
我正在尋找一種方法來傳遞assumed變量的值。

回答

1

很難確切地說出你想要做什麼。如果你有一個非常有用的例子。

在一個絕對的緊急代碼腮腺炎的東西,並得到一個變量,你可以做這樣的事情: (這是很古老,但將工作)

LineLabel:

s myVar = ^some("global","reference") 
d $zf(-1,"echo "_myVar_"> c:\myvar.txt") 
q 

然後去從C#的文本文件或任何你使用的語言抓住變量。

同樣,shell out(回調)函數($ zf,-1)在性能方面是陳舊的,可能代價很高,但可以在2.0版中解決。

Caché使用術語ByRef或By Reference來訪問特定作業中的變量。這可能有助於研究。祝你好運!

+0

我加了一個例子。我應該注意到,我沒有以任何身份使用ObjectScript。 –

+0

不過,我不確定DoSomethingFunky是什麼樣的。它應該在同一例程中具有「s x = $$ DoSomethingFunky()」的子例程。相比之下,DoSomethingFunkier看起來像它將用作子例程而不是函數。這意味着退出後的值將在退出時完全沒有任何影響。 您的代碼看起來是要這樣的: ðDoSomethingFunkier(A2) 您可能需要做這樣的事情,而不是 DoSomethingFunkier(參數1)問: ðDoSomethingFunkier(A2,.as1) DoSomethingFunkier(參數1,假定) 假設=「東西」 這將設置.as1假定參考 –

+0

我很清楚通過引用傳遞變量:-)在完全公開的情況下,我創建了一個M語言的編譯後擴展來支持編寫的程序用另一種語言 - 既沒有也不需要傳遞參考的概念。 (回想起來,把'DoSomethingFunky'稱爲''o'''這樣的一個內在*函數更有意義。)事實是,我仍然無法訪問外語中的'as1'的值。這是問題的關鍵。 –