Указатели метода F # "недоступны из этого местоположения кода" - PullRequest
2 голосов
/ 09 февраля 2012

Listing Script.fsx:

 #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 аргументами?

1 Ответ

2 голосов
/ 09 февраля 2012

Есть две публичные перегрузки на BeginCreateQueue.Я предполагаю, что вывод типа затрудняется угадать, какой вы хотите.Попробуйте добавить аннотацию типа:

Async.FromBeginEnd(name, 
  nm.BeginCreateQueue : string * AsyncCallback * obj -> IAsyncResult, 
  nm.EndCreateQueue)

Если это не та перегрузка, которую вы хотите, попробуйте заменить QueueDescription на string.

...