F #에서 JSON을 구문 분석 (예 : FSharp.Data 덕분에 유형 공급자가있는 경우)하는 것이 더 예리하지만 'fsx 파일에서이 작업을 수행하고 있으며 Nuget + Paket 도구를 다루지 않으려 고합니다.), 여기 System.Web.Script.Serialization.JavaScriptSerializer
을 사용하고 있습니다.F # : System.Collections.Dictionary에서 요소를 찾을 때 이상한 컴파일러 오류가 발생합니다.
나는이 funcion로, 사전의 요소를 찾을 때 문제는 다음과 같습니다
let isTestNet(): bool =
let json = SomeFuncThatGivesMeAString()
let jss = new JavaScriptSerializer()
let dict = jss.DeserializeObject(json) :?> Dictionary<string, obj>
for entry in dict do
if (entry.Key.Equals("testnet")) then
let result = entry.Value :?> bool
result
failwith "JSON response didn't include a 'testnet' element? " + json
컴파일러는 마지막 줄에 두 번째 강조,이 오류와 함께 :
error FS0001: This expression was expected to have type
unit
but here has type
bool
은 무엇입니까 거래? 함수 헤더에 형식을 지정하기도합니다. 왜 유닛을 기대합니까?
함수의 결과 것은 failwith', 이전의 모든 값을 폐기하고 '이다. 그래서 컴파일러는 우리를 위해 당신을 가리 킵니다. –
@FyodorSoikin : 아니요, 'failwith' 대신에 "false"라고해도 같은 오류로 실패합니다. @ildjarn이 맞다 – knocte
'failwith' 대신'false'를 쓰면, 함수의 결과는 항상'false'가되어 항상 이전의 모든 값을 버립니다. 내 의견은 여전히 적용됩니다. –