2012-01-02 4 views
0

を返す関数から値を返すF#が、私はタイプユニット

type figure = 
{ 
    what : int; 
    position : Point; 
    size : Point; 
} 

を持っていると私は私の関数は、それが(ユニットを返却したいイベントだがあるため、このタイプを返すようにしたい) 方法をすることができます私はユニットの代わりにこの型を返す私の関数を得る?

let checkInput = 
drawArea.MouseClick.Add(fun args -> 
    if args.Button = MouseButtons.Left then 
     new figure { what = 0; position = new Point(args.X, args.Y); size = new Point(50, 50) }) 

この上の任意のヘルプは、コンパイラが作成した新しい数字をどうするかを知らないあなたの例では

+1

を使用して参照セルの値を確認することができます正確に達成するために?あなたの関数がFigureを返してもそれを 'Add'に渡すことが可能であったとしても、' Add'は戻り値で何もできないので、無視されます。 – sepp2k

+0

@ sepp2kマウスがクリックされた場所から位置をとり、それを私の姿に保存する機能があります。その後、Figureを別の関数に返します。 'Add'に渡すべきではありません。 – OlssN

+1

あなたは' Add'に渡しています。あなたが 'Add'にそれを渡したくなければ、あなたはあなたが望むものを自由に返すことができます。問題は、マウスをクリックしたときに関数を呼び出すことで、コードから手動で呼び出したときに関数が呼び出されるようにすることです。だからどこに正確に数字が返されますか? – sepp2k

答えて

1

をいただければ幸いです。図はどこかに格納するか、関数に渡す必要があります。ここでは関数に渡す例を示します。フォームをクリックすると、タイトルがクリックされた位置に更新されます。

open System.Drawing 
open System.Windows.Forms 

type Figure = { 
    what : int; 
    position : Point; 
    size : Point; 
} 

let drawArea = new Form() 

let print figure = 
    drawArea.Text <- figure.position.ToString() 

drawArea.MouseClick.Add(fun args -> 
    if args.Button = MouseButtons.Left then 
     print { what = 0; position = Point(args.X, args.Y); size = Point(50) } 
) 

Application.Run(drawArea) 

この例では、これら2つのアセンブリをプロジェクトの参照に含める必要があります。

System.Drawing 
System.Windows.Forms 
+0

これはうまくいくかもしれません、どうして私はそれを考えなかったのですか:(ありがとうございました – OlssN

0

これは、参照セルを使用するのに最適な理由のように聞こえる -

let fig = ref None 
let checkInput = 
drawArea.MouseClick.Add(fun args -> 
    if args.Button = MouseButtons.Left then 
     fig := Some(new figure { what = 0; position = new Point(args.X, args.Y); size = new Point(50, 50) })) 

このような、あなたはちょうどあなたが何をしようとしている

match !fig with 
|Some(t) -> //do something 
|None -> //mouse hasn't been clicked 
+0

それは行く道ですね!ありがとう! – OlssN