level 5
比如
type cc() =
member this.f(x : int byref) = x <- x + 123
let c = new cc()
let f(x : int byref) = x <- x + 321
let aa : int ref = ref 11
c.f(aa)
f aa //←编译错误
其中cc.f和f的形参是一模一样的, 但是调用f时却出现编译错误, 这是怎么回事?
2014年09月22日 12点09分
1
level 10
type cc() =
member this.f( x :int byref) = x <- x + 123
let c = new cc()
let f( x : int byref) = x <- x + 321
let aa : int ref = ref 11
c.f ( &aa.contents )
aa
f ( &aa.contents )
aa
////////////////////////////
let mutable aa = 11
c.f ( &aa )
aa
f ( &aa )
aa
2014年09月24日 11点09分
2
谢谢, 我知道问题出在哪了.
2014年09月24日 12点09分
level 10
一般来说,不应该使用变量。
能分享一下代码的使用场景吗?
2014年09月26日 04点09分
3
level 5
回复 @hadstj
我在学f#时写了一些排序练练手
写排序时候觉得不断写"数组.[i]"太麻烦了, 我想偷工减料便想到使用引用.
一开始以为int ref和int byref是同一个东西, 在调用交换函数的时候就出现1L的问题, 看到MSDN里的示例代码可以编译而我的代码不能编译于是发帖提问.
后来仔细看了一下MSDN发现int ref只是产生一个复制, 跟我心目中的引用不一样(感觉被微软坑了一把). 现在果断写成"let a = &数组.[i]"的方式偷懒.
至于变量, 我是觉得像选择排序的话至少要使用一个变量记录最值序号, 这样才能交换数组元素, 我实在是想不出不使用变量的话怎么写选择排序.
2014年09月26日 14点09分
4
这是个好问题。
2014年09月27日 23点09分
从来都未写过排序等这类基本算法。
2014年09月27日 23点09分
一直是用语言本身提供的sort
2014年09月27日 23点09分
用FP语言就应用适于FP的算法,不应强求。 f
#的变量推荐用mutable,f#
4.0应该支持堆中的mutable
2015年01月28日 13点01分