이 멋진 튜토리얼 에서 f #의 간단한 예제를 가지고 놀았습니다 . 그리고 매우 이상한 오류가 발생했습니다. webrequest에 프록시를 추가 한 후 WebProxy 유형이 예상 유형 IWebProxy와 호환되지 않는다는 메시지가 표시됩니다. 이것은 일종의 이상합니다. 왜 내 C # 망치가 F #에서 작동하지 않습니까?
내가 여기서 뭘 잘못하고 있니?
let downloadUrlToFile url file =
let req = WebRequest.Create(Uri(url))
req.Proxy = new WebProxy("127.0.0.1", 444)
use res = req.GetResponse()
use stream = res.GetResponseStream()
use reader = new IO.StreamReader(stream)
let timestamp = DateTime.UtcNow.ToString("yyy-MM-dd")
let path = sprintf "%s.%s.html" file timestamp
use writer = new IO.StreamWriter(path)
writer.Write(reader.ReadToEnd())
printfn "done loading %s to %s" url file
오류 메시지
This expression was expected to have type
IWebProxy
but here has type
WebProxy
다른 사람들이 이미 설명했듯이 문제는 =
비교 연산자라는 것입니다. 이 경우 할당이 필요합니다 <-
.
그러나 F #은 실제로 몇 가지 경우에 암시 적으로 업 캐스트를 수행하고 할당이 그중 하나이므로 :> IWebProxy
개체를 캐스팅 하기 위해 추가 할 필요가 없습니다 . 다음은 잘 작동합니다.
req.Proxy <- new WebProxy("127.0.0.1", 444)
할당 외에도 F #은 메서드 또는 함수에 인수를 전달할 때 암시 적 업 캐스팅을 수행합니다. 비교 연산자에 대해서는이를 수행하지 않습니다 (모호함없이 어떤 유형이 비교되는지 알고 싶기 때문입니다.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다