To jest naprawdę dziwne i obawiam się, że właśnie zrobiłem coś głupiego, ale nie mogę tego rozgryźć.F # przekazywanie do funkcji, uzyskanie wartości null jako wartości parametru
olewam None
do funkcji some
jako pierwszy parametr, ale podczas wykonywania funkcji, wartość parentNode
jest null (ja nie dotyczy to drukowania null dla None
wartość parametru funkcja jest null nie None
). W efekcie otrzymuję zerowy błąd referencyjny w wierszu funkcji drukowania, ponieważ parentNode ma wartość null. Próbowałem zduplikować argumenty i zmienić kolejność, ale to nie pomogło. Mam podejrzenie, że ma to coś wspólnego z currying, ale jestem zagubiony ...
Musiałem zastąpić rzeczywistą wartość adresu URL pustym ciągiem w przypadku problemów firmowych, ale jest to adres URL do xsd czy to pomaga
Oto kod:
#light
open System
open System.Xml
open System.Net
open System.Collections.Generic
type StartResult =
| Parameters of XsdParserParameters
| Xsd of Xsd
and Xsd(text) =
let rows = new List<string>()
member this.Text
with get() = text
member this.Rows
with get() = rows
and XsdParserParameters() =
let mutable url = ""
member this.Url
with get() = url
and set(value) = url <- value
member this.Start() =
try
use client = new WebClient()
let xsd = client.DownloadString(this.Url)
StartResult.Xsd(Xsd(xsd))
with e ->
StartResult.Parameters(this)
let processor() =
let parameters = XsdParserParameters()
parameters.Url <- ""
match parameters.Start() with
| StartResult.Parameters(xpparams) ->
//some error
()
| StartResult.Xsd(xsd) ->
let rec some (parentNode : XmlNode option) (node : XmlNode) =
let a =()
for subNode in node.ChildNodes do
match subNode.LocalName with
| "complexType" ->
xsd.Rows.Add(
sprintf
"%O~%s~%d~%d~%s~%s~%O"
parentNode
subNode.Value
1
1
(subNode.Attributes.GetNamedItem("name").Value)
""
false)
some (Some(subNode)) subNode
| "sequence" ->
some parentNode subNode
| "element" ->
xsd.Rows.Add(
sprintf
"%O~%s~%d~%d~%s~%s~%O"
parentNode
subNode.Value
1
1
(subNode.Attributes.GetNamedItem("name").Value)
""
false)
some (Some(subNode)) subNode
| _ ->
()
let xdoc = new XmlDocument();
xdoc.LoadXml(xsd.Text)
some (None) (xdoc.DocumentElement)
processor()
printfn "Done..."
Console.ReadLine() |> ignore
W którym wierszu występuje wyjątek odwołania o wartości zerowej? 'sprintf"% O "null' powinno działać dobrze, i nie widzę żadnego innego odniesienia do' parentNode', czy jesteś pewien, że jest to skąd pochodzi błąd? – Guvante