参考物体

时间:2013-12-21 23:20:45

标签: f# unity3d

namespace FsharpUnity
open UnityEngine

type DebugTest() = 
    inherit MonoBehaviour()
    member this.Update() = 
       let m = Input.mousePosition
       let look = Camera.main.ScreenPointToRay(m)
       let mutable r = new RaycastHit()
       if Physics.Raycast(look, ref r,1000.0f ) then
           Debug.Log("I hit: " + r.point.ToString())
       ()

我目前正在尝试将F#与Unity3d一起使用,我不确定如何将ref关键字与对象一起使用。

我用

尝试了
let mutable r = new RaycastHit() // Is this incorrect?
           if Physics.Raycast(..., ref r,....) then

r总是空的,看起来有点奇怪。没有关于如何在http://msdn.microsoft.com/en-us/library/dd233186.aspx

上使用ref关键字和对象的示例

我犯了错误吗?

澄清我的问题:这是正确的语法吗?

let mutable r = new RaycastHit()
... ref r ....

1 个答案:

答案 0 :(得分:4)

你可以添加& char到你的r变量的开头 这样....

let mutable r = new RaycastHit()

Physics.Raycast(look, &r,1000.0f )

see here

要么 ....

你可以使用被认为是“功能方式”而没有任何变量(“可变”)

source具有out参数的函数被视为具有返回类型的元组类型,因此您可以像这样使用您的示例:

let (result, result_of_b_param) = function 3
let (result, int_value) = Int32.TryParse "3"

match Int32.TryParse "23" with
| (true, x) -> ...
| _ -> ...

您可以使用该属性 关于函数参数的System.Runtime.InteropServices.OutAttribute

open System.Runtime.InteropServices

type foo () =
member x.Foo ([] y : int32 ref) =
y := 0