f# 函数名称隐藏类型转换
f# functions name hiding type casting
我在搞乱 f#Koans,这将 运行 (2*2 = 2)。根据我的理解,当在四倍范围内时, 'double' 强制转换被本地函数隐藏。一旦退出,我就不会收到编译器错误,因为我找回了 'cast'?
let NestingFunctions() =
let quadruple x =
let double x =
x * 2
double(double(x))
let result = quadruple 4
let resultDouble = double 2
AssertEquality resultDouble 2
虽然它看起来像铸造,但实际上并非如此。转换运算符是 :>
和 :?>
,它们不能被覆盖。对于转换运算符,类型必须兼容。
double
函数就是一个函数,适用于任何实现显式转换运算符 (op_Explicit
) 的对象。在 F# 中,我们称此为 以将 值转换为双倍值。
但是你的问题是关于范围的。如果您创建一个隐藏全局函数的函数,您仍然可以通过使用 global.
作为前缀将其返回到范围内。尽管正如其他人已经说过的那样,某些 built-in 函数不应该被隐藏,除非有充分的理由。
let NestingFunctions() =
let quadruple x =
let double x =
x * 2
// FQN (fully qualified) works
let bar = global.FSharp.Core.ExtraTopLevelOperators.double 42
// or in this case, just qualify with the module also works
let xx = ExtraTopLevelOperators.double 42
// these both call your self-defined 'double' function
double(double(x))
// from here, since we outdented, function 'double' is not in scope anymore
let result = quadruple 4
let resultDouble = double 2 // this is the built-in function
()
我在搞乱 f#Koans,这将 运行 (2*2 = 2)。根据我的理解,当在四倍范围内时, 'double' 强制转换被本地函数隐藏。一旦退出,我就不会收到编译器错误,因为我找回了 'cast'?
let NestingFunctions() =
let quadruple x =
let double x =
x * 2
double(double(x))
let result = quadruple 4
let resultDouble = double 2
AssertEquality resultDouble 2
虽然它看起来像铸造,但实际上并非如此。转换运算符是 :>
和 :?>
,它们不能被覆盖。对于转换运算符,类型必须兼容。
double
函数就是一个函数,适用于任何实现显式转换运算符 (op_Explicit
) 的对象。在 F# 中,我们称此为 以将 值转换为双倍值。
但是你的问题是关于范围的。如果您创建一个隐藏全局函数的函数,您仍然可以通过使用 global.
作为前缀将其返回到范围内。尽管正如其他人已经说过的那样,某些 built-in 函数不应该被隐藏,除非有充分的理由。
let NestingFunctions() =
let quadruple x =
let double x =
x * 2
// FQN (fully qualified) works
let bar = global.FSharp.Core.ExtraTopLevelOperators.double 42
// or in this case, just qualify with the module also works
let xx = ExtraTopLevelOperators.double 42
// these both call your self-defined 'double' function
double(double(x))
// from here, since we outdented, function 'double' is not in scope anymore
let result = quadruple 4
let resultDouble = double 2 // this is the built-in function
()