2
上市Script.fsx「不是從這個代碼位置訪問」:F#方法指針
#load "AccountDetails.fs"
#r @"..\packages\FSharpx.Core.1.4.120207\lib\FSharpx.Async.dll"
#r @"C:\Program Files\Windows Azure SDK\v1.6\ServiceBus\ref\Microsoft.ServiceBus.dll"
#load "AzureServiceBus.fs"
open AccountDetails
open FSharp.Control
open Microsoft.ServiceBus
open Microsoft.ServiceBus.Messaging
// Let's do some service bus hacking
let tp = TokenProvider.CreateSharedSecretTokenProvider(issuer_name, key)
let asb_uri = ServiceBusEnvironment.CreateServiceUri("sb", ns, "")
let mf = MessagingFactory.Create(asb_uri, tp)
let nm = NamespaceManager(asb_uri, NamespaceManagerSettings(TokenProvider = tp))
module Queue =
let queueDescription name = async {
let! exists = Async.FromBeginEnd(name, nm.BeginQueueExists, nm.EndQueueExists)
return! if exists then Async.FromBeginEnd(name, nm.BeginGetQueue, nm.EndGetQueue)
else Async.FromBeginEnd(name, nm.BeginCreateQueue, nm.EndCreateQueue)
}
和我得到這個錯誤:Script.fsx(22,43): error FS0503: The member or object constructor 'BeginCreateQueue' taking 3 arguments are not accessible from this code location. All accessible versions of method 'BeginCreateQueue' take 3 arguments.
因此它告訴我,有3個參數的方法是不可訪問,但有3個參數的可訪問版本?
這工作,雖然有不同的包圍!我想,因爲我通過FromBeginEnd一個字符串,它會知道選擇與字符串重載?爲什麼不呢? – Henrik 2012-02-09 18:42:11
我認爲答案是:在使用'BeginCreateQueue'的時候,'name'的類型尚未被推斷出來。類型推斷只能使用可用的類型信息_to_到使用點。鑑於此,向'name'('FromBeginEnd(name:string,...')添加一個類型註釋應該可以修復它(並且需要更少的輸入) – Daniel 2012-02-09 20:30:05
正確,這意味着如果我寫'queueDescription' '我不會得到錯誤? – Henrik 2012-02-10 09:07:20