Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 为let语句定义运算符(绑定)_F#_Metaprogramming - Fatal编程技术网

F# 为let语句定义运算符(绑定)

F# 为let语句定义运算符(绑定),f#,metaprogramming,F#,Metaprogramming,在F#中,是否可以定义一个操作符,比如(是的,如果处理变量而不是绑定,那么就有可能 例如,对于ref单元格,可以执行以下操作: let a = ref 5 let (<<) var value = var := value a << 6 !a // returns 6 设a=ref 5 let(谢谢@Gustavo。如果我传递一个字符串“var”,是否可以实例化它?let(这是另一种情况。您将根据名称对变量进行变异,但名称可能会在运行时丢失。使用反射和引用可能是可

在F#中,是否可以定义一个操作符,比如(是的,如果处理变量而不是绑定,那么就有可能

例如,对于ref单元格,可以执行以下操作:

let a = ref 5

let (<<) var value = var := value

a << 6

!a // returns 6
设a=ref 5

let(谢谢@Gustavo。如果我传递一个字符串“var”,是否可以实例化它?let(这是另一种情况。您将根据名称对变量进行变异,但名称可能会在运行时丢失。使用反射和引用可能是可行的。我已接受您在参考号案例中的答案。但我担心引用不容易。来自msdn:例如,对于let绑定,您需要绑定名称的定义和使用绑定的附加表达式。在详细语法中,这是一个在In关键字后面的表达式。在模块的顶层,这只是模块中的下一个表达式,但在引号中,它是显式必需的。“我同意,这并不容易。而且你会失去类型安全性,因为编译器不再知道你要给哪个变量赋值,所以也不知道要检查哪个类型。Gustavo,一个有趣的计划是在github上编写Yaaf.FSharp.Scripting,它可以使用以下语法让赋值成为可能:fsiSession.let“test”你听说过吗?
let a = ref 5

let (<<) var value = var := value

a << 6

!a // returns 6