Перво-наперво, пожалуйста, напишите сообщения об ошибках и гораздо более конкретный c вопрос. Спасибо! Но, к счастью, я могу вывести сообщения об ошибках из этой проблемы.
Далее, если вы хотите изменить SalaryType после деконструкции вашего employee
8 кортежа, вы должны написать, используя ключевое слово mutable
:
let mutable (fName, lName, Occupation, Department, SalaryType,
HoursPerWeek, AnnualSalary, HourlyWage) = employee
Но вы не должны. Это будет объяснено ниже.
Следующая проблема: нет точечной нотации (нет tuple.member
) для доступа к членам кортежа. Это возможно только через деконструкцию. Таким образом, вы не можете employee.SalaryType
.
Вот что, по-видимому, является сутью проблемы, и это ошибка, которую я совершал много раз, когда я изучал функциональное программирование, и это сложный сдвиг парадигмы для адаптации к , Вы не должны пытаться изменить данные или, в этом случае, переменные. Переменные или значения, как они называются в F #, не должны изменяться, как правило. Функции должны быть чистыми.
Это означает, что любые параметры, передаваемые в функцию, не должны изменяться после выхода из функции. Параметр employee
должен быть таким же после того, как вы вернетесь в область вызова.
Есть несколько синтаксических ошибок, которые вы сделали, что делает для меня почти невозможным вывод, что вы пытаетесь сделать в первое место. Пожалуйста, включите это в вопрос.
Также, последний придирчивый. Как вы знаете, последнее выражение в функции F # это возвращаемое значение. Вместо использования оператора if просто верните проверяемое условие, например:
let ...
...
employee.SalaryType = SalaryType
<- но помните, что вы не можете использовать точечную запись в кортежах; это всего лишь пример </p>
Пожалуйста, прочитайте больше на https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/