F # использование функций-членов экземпляра класса

#f#

#f#

Вопрос:

Я пытаюсь создать соединение для открытия базы данных через ODBC. Я не могу понять, как выполнить функции-члены объектов. Код:

 let DbConnection = new System.Data.Odbc.OdbcConnection()

DbConnection.open
  

Ошибки, которые я получаю, являются: Missing qualification after '.'

или иногда: unexpected identifier in implementation file

Кто-нибудь знает, что не так с моим синтаксисом?

Комментарии:

1. Вы пробовали DbConnection.Open() ?

Ответ №1:

Я полагаю, вы хотели что-то вроде этого:

 let dbConnection = new System.Data.Odbc.OdbcConnection()
dbConnection.Open()
  

Проблемы заключаются в:

  • F # чувствителен к регистру, поэтому вам нужно Open , а не open (также open это ключевое слово языка, поэтому, если вы хотите использовать его в качестве имени, вам придется написать ``open`` — двойная обратная галочка — это способ ссылаться на зарезервированные имена)

  • Open это функция, поэтому, если вы хотите ее вызвать, вам нужно предоставить ей аргумент. Вы также можете рассматривать это как значение функции и писать, скажем, let f = dbConnection.Open

  • Я также изменил ваше именование, чтобы использовать camelCase для переменных, что является стандартным способом F #

Комментарии:

1. k спасибо. это работает, также в качестве касательной вы прочитали недавнюю статью Олега об отражении без угрызений совести, я прочитал пару ваших недавних сообщений в блоге, и обновление monad в паре с реализацией отражения олега может быть классным в f#