이 표현식은 IWebProxy 유형을 가질 것으로 예상되었지만 여기에는 WebProxy 유형이 있습니다.

니키타 이그나 토프

이 멋진 튜토리얼 에서 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사