小编Cur*_*ols的帖子

代码错误或我的误解?

我看到我无法从F#编译器解释的行为(Visual F#3.1.1.0) - 表面上出现的只是命名本地和传递临时之间的区别实际上产生了行为差异.

我不了解F#行为,或者这是代码生成错误?(我知道,后者更有可能.)

Repro - 我发现很难在没有使用Reactive Extensions的情况下重新编译,所以这就像我得到它一样简单.请注意,try1try2几乎是一样的.

open System
open System.Reactive.Linq
open System.Threading

let interval = TimeSpan.FromSeconds(0.5)
let testDuration = TimeSpan.FromSeconds(2.0)

let mkHandler () = // creates a function that closes over state
    let count  = ref 0
    fun _ -> count := !count + 1
             printfn "State is now %d" !count

let try1 () =
    printfn "try1"
    let handler = mkHandler ()
    use subscription = Observable.Interval(interval).Subscribe(handler)
    Thread.Sleep(testDuration)

let try2 () =
    printfn …
Run Code Online (Sandbox Code Playgroud)

f#

5
推荐指数
1
解决办法
118
查看次数

成员与类的F#记录

在F#中,您可以使用成员函数定义记录,也可以创建类。

type Album = {
    Id: int
    Name: string
    DateReleased: DateTime
    Genre: Genre }
with
    member this.PrintMessage() =
        printf "Hello from %s\n" this.Name
Run Code Online (Sandbox Code Playgroud)

这么用

let first = 
        { Id = 1; 
          Name = "Hello World!"
          Genre = KPop;
          DateReleased = DateTime(1991, 8, 12) }
first.PrintMessage()
Run Code Online (Sandbox Code Playgroud)

与类可能是这样的。

type Album(
     Id: int, 
     Name: string, 
     DateReleased: DateTime, 
     Genre: Genre ) as me =
     do
         me.PrintMessage()
     member this.PrintMessage() =
         printf "Hello %s" Name
Run Code Online (Sandbox Code Playgroud)

什么时候方便使用另一个?只能对记录进行域建模吗?

是否可以通过某些隐藏的FSharp Casting将类转换为记录,反之亦然?

f#

2
推荐指数
1
解决办法
119
查看次数

标签 统计

f# ×2