F# 函数参数被 IDE 显示为 Null 但它有一个值
F# Function Parameter is Shown as Null by the IDE but it has a Value
我目前正在阅读 Real World Functional Programming,我对其中一个代码片段有疑问,即 3.10
这是一个处理模式匹配的例子。看看下面的截图,我不明白为什么在执行的那个点(那个断点)tuple是null:
据我了解,元组是传递给 withSecond 函数的参数。
如果有人能向我解释为什么该标识符此时应该具有空值,那就太好了。
干杯
编辑
添加代码:
let printCity(cityInfo) =
printfn "Population of %s is %d."
(fst cityInfo) (snd cityInfo)
let withSecond newItem2 tuple =
let (originalItem1, originalItem2) = tuple // Decompose a tuple into two values
(originalItem1, newItem2) // Use 'f' as a first and 'nsnd' as the second element
// Increment population and print the new information
let prague0 = ("Prague", 1188000)
let prague1 = withSecond ((snd prague0) + 13195) prague0
printCity prague1
System.Console.ReadKey() |> ignore
参数 tuple
不为空。这是您有时使用 f# 运行 遇到的调试器中的一个错误。
Here 是一个 dotnetfiddle,表明它不为空。
变量prague0
被传递给函数。所以函数内的 tuple
与 prague0
相同。
我在调试 f# 时看到这种情况发生了很多次,当您在某些点检查 this
时,这也会变得相当奇怪。调试器真的是面向 c#
的。例如watch语句也应该写成c#
。
当您进一步检查时,您会注意到编译后的函数签名是:withSecond<int,string,int>(int newItem2, string tuple_0, int tuple_1)
这解释了为什么调试器找不到 tuple
。如果您向 tuple_0
添加手表,您会看到它包含 "Prague"
.
我目前正在阅读 Real World Functional Programming,我对其中一个代码片段有疑问,即 3.10
这是一个处理模式匹配的例子。看看下面的截图,我不明白为什么在执行的那个点(那个断点)tuple是null:
据我了解,元组是传递给 withSecond 函数的参数。
如果有人能向我解释为什么该标识符此时应该具有空值,那就太好了。 干杯
编辑
添加代码:
let printCity(cityInfo) =
printfn "Population of %s is %d."
(fst cityInfo) (snd cityInfo)
let withSecond newItem2 tuple =
let (originalItem1, originalItem2) = tuple // Decompose a tuple into two values
(originalItem1, newItem2) // Use 'f' as a first and 'nsnd' as the second element
// Increment population and print the new information
let prague0 = ("Prague", 1188000)
let prague1 = withSecond ((snd prague0) + 13195) prague0
printCity prague1
System.Console.ReadKey() |> ignore
参数 tuple
不为空。这是您有时使用 f# 运行 遇到的调试器中的一个错误。
Here 是一个 dotnetfiddle,表明它不为空。
变量prague0
被传递给函数。所以函数内的 tuple
与 prague0
相同。
我在调试 f# 时看到这种情况发生了很多次,当您在某些点检查 this
时,这也会变得相当奇怪。调试器真的是面向 c#
的。例如watch语句也应该写成c#
。
当您进一步检查时,您会注意到编译后的函数签名是:withSecond<int,string,int>(int newItem2, string tuple_0, int tuple_1)
这解释了为什么调试器找不到 tuple
。如果您向 tuple_0
添加手表,您会看到它包含 "Prague"
.