2011-04-04 72 views
0

從這裏開始 - Embedding F# interactive - 我一直試圖在我的應用程序中嵌入FSI。幫助嵌入FSI

但是,我從StandardOutput獲取了奇怪的東西。

例如,在標準的FSI,如果我把這個:

let a = 3;; 

我得到這個回:

[empty line here] 
val a : int = 3 
[empty line here] 
> | 

(與代表輸入位置管)

但是,如果我將let a = 3;;發送到StandardInput,我將此返回到StandardOutput:

> 
val a : int = 3 
| 

有沒有其他人試過這個?有什麼我做錯了,如果不是有什麼辦法可以解決這個問題嗎?到目前爲止,我嘗試過的所有事情都沒有發揮作用,在嘗試我能想到的「更糟糕的」事情之前(在發送內容後設置計時器,超時時添加>自己),我想知道是否存在更好的方法!

回答

3

嵌入F#Interactive時,Visual Studio使用--fsi-server:<some value>參數。 據我所知,這個做了兩件事情:

  • 改變輸出打印(而不是打印>的方式,在一個單獨的行打印SERVER-PROMPT>,所以應該更容易從輸出中刪除並在預期輸入時檢測狀態)

  • 它還啓動一些.NET Remoting通道,您可以使用它來停止F#Interactive中的命令執行(例如,如果它運行到無限循環中)並且它也可以提供一些完成信息。

MonoDevelop F#插件中的F#Interactive pad使用標誌(see source code on GitHub)。我認爲它大部分都是正確的,但我相信它有時在輸出中打印額外的\n

+0

謝謝,謝謝,謝謝! – Benjol 2011-04-04 13:58:44

+1

我只是無法抗拒嘗試'printfn「SERVER-PROMPT>」;;'VS :) – Benjol 2011-04-05 04:55:41

+0

對於FSharpChart也是巨大的榮譽,它確實是'缺少的鏈接'... – Benjol 2011-04-05 05:23:06