小编pbl*_*cci的帖子

如何实现与Dictionary.TryGetValue相同的行为

所以,给出以下代码

type MyClass () =
  let items = Dictionary<string,int>()
  do 
    items.Add ("one",1)
    items.Add ("two",2)
    items.Add ("three",3)
  member this.TryGetValue (key,value) =
    items.TrygetValue (key,value)
let c = MyClass () 

let d = Dictionary<string,int> ()
d.Add ("one",1)
d.Add ("two",2)
d.Add ("three",3)
Run Code Online (Sandbox Code Playgroud)

以及以下测试代码

let r1,v1 = d.TryGetValue "one"
let r2,v2 = c.TryGetValue "one"
Run Code Online (Sandbox Code Playgroud)

r1,v1行正常工作.r2,v2线炸弹; 抱怨c.TryGetValue必须给出一个元组.有趣的是,在每行中,TryGetValue的签名是不同的.如何让我的自定义实现显示与BCL版本相同的行为?或者,问另一种方式,因为F#有(隐含的)的元组参数,令行禁止参数和BCL参数的概念,我知道如何咖喱和元组风格的区分,我怎么能强迫第三样式(一拉BCL方法)?

如果不清楚,请告诉我.

.net implementation f# byref out-parameters

7
推荐指数
1
解决办法
1655
查看次数

P/Invoke函数重载

我正试图从F#调用一个C库,并遇到了一个奇怪的问题.我有一个包含我所有extern功能的模块.底层C库有两个具有相同名称但不同参数的函数.当然,这在F#模块中是不允许的.

module C =

  open System.Runtime.InteropServices

  [<DllImport("libc", CallingConvention = CallingConvention.Cdecl)>]
  extern int setValue(nativeint source, int value)

  [<DllImport("libc", CallingConvention = CallingConvention.Cdecl)>]
  extern int setValue(nativeint source, string value)

  // the previous function declaration cause the following compile-time error:
  // Duplicate definition of value 'setValue'
Run Code Online (Sandbox Code Playgroud)

有什么特殊的方法可以解决这个问题吗?我无法改变C库.

pinvoke f#

3
推荐指数
1
解决办法
420
查看次数

fsi.ShowDeclarationValues 如何工作?

根据MSDN文档:

当设置为 false 时,禁用在交互式会话的输出中显示声明值。

然而,以下示例交互式会话似乎与该摘要相矛盾。

> let x = 42;;

val x : int = 42

> fsi.ShowDeclarationValues <- false;;

val it : unit = ()

> let y = 42;;

val y : int
Run Code Online (Sandbox Code Playgroud)

我没想到上面的最后一行。

我是不是误会了什么?谁能确认这是否是一个错误?

谢谢。

f# f#-interactive f#-scripting

3
推荐指数
1
解决办法
309
查看次数