下一次測試失敗。我將GetType直接調用到函數定義中,然後我還在內聯函數中調用GetType。生成的類型不相等。比較F#中的函數類型
namespace PocTests
open FsUnit
open NUnit.Framework
module Helpers =
let balance ing gas = ing - gas
[<TestFixture>]
type ``Reflected types``()=
[<Test>] member x.
``test type equality with inline use``() =
let inline (=>) f = f.GetType().FullName, f in
let fullName, fval = (=>) Helpers.balance in
Helpers.balance.GetType().FullName |> should equal (fullName)
我怎麼能得到相同的類型,以便「可比」。
我通過反射得到一個地圖,其中規格爲(函數類型,名稱args,返回類型)。此外,我正在構建一個地圖obj * string>,並選擇這些函數。我想強制執行一個約定,以確保對於同一個鍵,我得到一個與規範相對應的函數(因爲函數映射是手工製作的)。但是,如果類型不同,就像你說的那樣,這看起來不太可行。 –
jruizaranguren
2014-09-10 21:48:29
這對我的目的來說就足夠了如果我可以用引號將函數包裝起來以獲得名稱或簽名。但根據你在http://stackoverflow.com/questions/4944668/f-quotations-traversing-into-function-calls-represented-by-a-value中的評論,這是不可行的,除非2011年之後有一些新的黑客可用。 – jruizaranguren 2014-09-11 10:32:17