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
我犯了错误吗?
澄清我的问题:这是正确的语法吗?
let mutable r = new RaycastHit()
... ref r ....
答案 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