我試圖在f#中使用函數,但是現在我發現了一個問題。f# - 這個表達式預計有int類型,但是這裏有類型'a - > int
我創建了函數來在數組和文件txt中添加數字,但Visual Studio說我的代碼中有一個錯誤。
功能是:
let fnAddNodeFileAndArray (pstrnode:string) lintRowResult:int =
//Declare variables
let mutable lstrText = ""
let mutable larrColisionsAux = Array2D.zeroCreate 0 0
let mutable lintIndexOfSpace = 0
let mutable lstrfirstNumber = ""
let mutable lstrsecondNumber = ""
let mutable lintNumberColisionNetwork = 0
let mutable lblnCollisionExist = false
let mutable lintRowResultAux=0
//Identify the position where the separator
lintIndexOfSpace<-pstrnode.IndexOf(",")
//Get nodes of the collision
lstrfirstNumber<-(pstrnode.Substring(0,lintIndexOfSpace))
lstrsecondNumber<-(pstrnode.Substring(lintIndexOfSpace + 1))
for lintRow = 0 to garrrows - 1 do
let mutable lintNumberAux1 = int garrColisions.[lintRow,0]
let mutable lintNumberAux2 = int garrColisions.[lintRow,1]
if (string lstrfirstNumber = string lintNumberAux1 && string lstrsecondNumber = string lintNumberAux2) ||
(string lstrfirstNumber = string lintNumberAux1 && string lstrsecondNumber = string lintNumberAux2) then
lblnCollisionExist <- true
if lblnCollisionExist=true then
printfn ""
printfn "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
printfn "Node already exist."
printfn "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
lintRowResultAux
else
//Copy the values of the array to auxiliar array
larrColisionsAux<-garrColisions
//Update de number of collisions
garrrows <- garrrows + 1
//Re-Create array
garrColisions <- Array2D.zeroCreate garrrows 3
for lintRow = 0 to garrrows - 2 do
garrColisions.[lintRow,0] <- larrColisionsAux.[lintRow,0]
garrColisions.[lintRow,1] <- larrColisionsAux.[lintRow,1]
garrColisions.[lintRow,2] <- larrColisionsAux.[lintRow,2]
//Save the new Number in auxiliar Array
garrColisions.[(garrrows-1),0] <- string lstrfirstNumber
garrColisions.[(garrrows-1),1] <- string lstrsecondNumber
//Save the number in the file
for lintCount = 0 to garrrows-1 do
lstrText <- lstrText + garrColisions.[lintCount,0] + " " + garrColisions.[lintCount,1] + "\n"
File.WriteAllText(gstrpath,lstrText)
for lintRow = 0 to (garrrows - 2) do
let mutable lintNumberAux1 = int garrColisions.[lintRow,0]
let mutable lintNumberAux2 = int garrColisions.[lintRow,1]
let mutable lintNumberCollisionNetworkAux = int garrColisions.[lintRow,2]
let mutable lblnLessOneNumberOfTheCollisionNetwork = false
if (lstrfirstNumber <> string lintNumberAux1) &&
(lstrsecondNumber <> string lintNumberAux2) &&
(lstrfirstNumber <> string lintNumberAux2) &&
(lstrsecondNumber <> string lintNumberAux1) then
if lintNumberColisionNetwork = 0 then
gintNumberColisionNetwork <- gintNumberColisionNetwork + 1
garrColisions.[(garrrows-1),2] <- string (gintNumberColisionNetwork)
elif ((lstrfirstNumber = string lintNumberAux1) && (lstrsecondNumber <> string lintNumberAux2)) ||
((lstrfirstNumber <> string lintNumberAux1) && (lstrsecondNumber = string lintNumberAux2)) ||
((lstrfirstNumber <> string lintNumberAux2) && (lstrsecondNumber = string lintNumberAux1)) ||
((lstrfirstNumber = string lintNumberAux2) && (lstrsecondNumber <> string lintNumberAux1)) then
if lintNumberColisionNetwork < lintNumberCollisionNetworkAux then
garrColisions.[(garrrows-1),2] <- garrColisions.[lintRow,2]
if lintNumberColisionNetwork <> 0 && lblnLessOneNumberOfTheCollisionNetwork = false then
gintNumberColisionNetwork <- gintNumberColisionNetwork - 1
lblnLessOneNumberOfTheCollisionNetwork <- true
lintNumberColisionNetwork <- int garrColisions.[lintRow,2]
elif lintNumberColisionNetwork > lintNumberCollisionNetworkAux then
garrColisions.[lintRow,2] <- garrColisions.[(garrrows-1),2]
if lintNumberColisionNetwork <> 0 && lblnLessOneNumberOfTheCollisionNetwork = false then
gintNumberColisionNetwork <- gintNumberColisionNetwork - 1
lblnLessOneNumberOfTheCollisionNetwork <- true
lintNumberColisionNetwork <- int garrColisions.[lintRow,2]
garrrows
let fnAddnode() =
let mutable lintrow = 0
let mutable lstrNode = ""
lstrNode <- fnGetNewNode()
lintrow <- fnAddNodeFileAndArray(lstrNode)
fnPrintCollisionOneNode (lintrow)
當我嘗試調用的函數,系統顯示該messagem:
這種表達預計將有一個int類型,但這裏的類型爲「A - > int
有人知道這是什麼意思?
通常,當您有類似'預計有類型的錯誤,但此處有類型'這意味着您沒有將參數傳遞給函數。 –
如果你正在學習F#和函數式編程,你應該避免使用'mutable'。我知道起初很難,但是你應該在開始時避免它,因爲它只會減慢你的學習速度,並且它不被認爲是功能性的。我使用mutable的唯一時間是當我使用[P/Invoke](https://msdn.microsoft.com/en-us/library/hh304361(v = vs.100).aspx) –
有許多重複項:例如[This expression](http://stackoverflow.com/questions/34321963/this-expression-was-expected-to-have-type-string-int-but-here-has-type-int?s=2|3.7914 )這意味着某些東西應該是一個數字,而不是一個函數。 – s952163