作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 BlockingCollection<'a> 上使用 TryTake 方法以毫秒为单位传递超时时间?
这是签名:
BlockingCollection.TryTake(item: byref, millisecondsTimeout: int) : bool
是否可以使用 Tuple 方法来避免像 Dictionary.TryGet 方法那样传递 ref 类型?
IE。
让成功, item = myDictionary.TryGetValue(client)
我正在努力解决这个特殊的签名,任何建议都会很棒。
干杯!
最佳答案
我相信您只能将这种技术用于 byref
出现在参数列表末尾的参数(这类似于可选参数的规则)。所以如果 BlockingCollection.TryTake
用签名 int * 'T byref -> bool
定义它会工作,但因为它被定义为 'T byref * int -> bool
它不会。
例如:
open System.Runtime.InteropServices
type T =
static member Meth1(a:int, [<Out>]b:string byref, [<Out>]c:bool byref) : char =
b <- sprintf "%i" a
c <- a % 2 = 0
char a
static member Meth2([<Out>]b:string byref, [<Out>]c:bool byref, a:int) : char =
b <- sprintf "%i" a
c <- a % 2 = 0
char a
// ok
let (r,b,c) = T.Meth1(5)
// ok
let (r,c) = T.Meth1(5,ref "test")
// ok
let r = T.Meth1(5, ref "test", ref true)
// doesn't compile
let (r,b,c) = T.Meth2(5)
// doesn't compile
let (r,c) = T.Meth2(ref "test", 5)
// ok
let r = T.Meth2(ref "test", ref true, 5)
关于f# - 如何在 F# 中使用 BlockingCollection<'a>.TryTake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927649/
我是一名优秀的程序员,十分优秀!