- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些包装 TA-Lib 的代码,很多包装器都非常相似:
let sma (timePeriod: int) (data: float[]) =
let mutable outStartIndex = 0
let mutable outNbElement = 0
let mutable smaData : float array = Array.zeroCreate (data.Length - timePeriod + 1)
let retCode = Core.Sma(0, (data.Length - 1), data, timePeriod, &outStartIndex, &outNbElement, smaData)
if retCode <> Core.RetCode.Success then
invalidOp (sprintf "AssertRetCodeSuccess")
let padding = Array.create (timePeriod - 1) System.Double.NaN
Array.append padding smaData
let ema (timePeriod: int) (data: float[]) =
let mutable outStartIndex = 0
let mutable outNbElement = 0
let mutable emaData : float array = Array.zeroCreate (data.Length - timePeriod + 1)
let retCode = Core.Ema(0, (data.Length - 1), data, timePeriod, &outStartIndex, &outNbElement, emaData)
if retCode <> Core.RetCode.Success then
invalidOp (sprintf "AssertRetCodeSuccess")
let padding = Array.create (timePeriod - 1) System.Double.NaN
Array.append padding emaData
let myGenericFunction (timePeriod: int) (data: float[]) TALibFunc =
let mutable outStartIndex = 0
let mutable outNbElement = 0
let mutable smaData : float array = Array.zeroCreate (data.Length - timePeriod + 1)
let retCode = TALibFunc(0, (data.Length - 1), data, timePeriod, &outStartIndex, &outNbElement, smaData)
if retCode <> Core.RetCode.Success then
invalidOp (sprintf "AssertRetCodeSuccess")
let padding = Array.create (timePeriod - 1) System.Double.NaN
Array.append padding smaData
[FS0412] A type instantiation involves a byref type. This is not permitted by the rules of Common IL.
最佳答案
简答:更换您的 mutable
参数与 ref
.
TA-Lib 有一个非常不幸的 API:那些讨厌的 out
-parameters(在 F# 中称为 byref
),它们总是会制造麻烦。在这种情况下,它们不能是泛型类型实例化的一部分。
这是一个更短的例子。考虑一个好的老list<T>
.我们可以做一个空list<int>
:
let noInts = [] : list<int>
int
s 是
byref
?
let noRefs = [] : list< byref<int> >
myGenericFunction
的最后一个参数是一个 F# 函数。在 F# 中,函数由类型
FSharpFunc<T, R>
表示(其中
T
是参数,
R
是结果)。所以你最后一个参数的类型是这样的:
FSharpFunc< int * int * float array * int * byref<int> * byref<int> * float array, int >
byref<int>
在那里?那些是
&outStartIndex
和
&outNbElement
.并且它们在通用实例化中是被禁止的。倒霉。
mutable
关键字只是在 F# 中创建可变单元格的两种方法之一。另一种方式是
ref
:
let x = ref 0 // Initialization
printfn "%d" !x // Prints "0"
x := 42 // Mutation
printfn "%d" !x // Prints "42"
mutable
, 被实现为一个库(而不是语言结构),并且在大多数情况下
mutable
更好。但这不是其中之一!
out
-参数,ref
单元格可以作为通用实例化的一部分就好了。因为,从 .NET 的角度来看,它们没什么特别的——只是另一个类。 ref
时,但你试图传递一个带有 out
的函数-parameter 在它的位置,编译器会自动为你生成一些包装代码。 myGenericFunction
像这样:
let myGenericFunction (timePeriod: int) (data: float[]) TALibFunc =
let outStartIndex = ref 0
let outNbElement = ref 0
let mutable smaData : float array = Array.zeroCreate (data.Length - timePeriod + 1)
let retCode = TALibFunc(0, (data.Length - 1), data, timePeriod, outStartIndex, outNbElement, smaData)
...
myGenericFunction 42 [|1; 2; 3|] Core.Sma // Wrapping code gets generated here
关于f# - 什么是错误 "A type instantiation involves a byref type."以及 F# 中的解决方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60405249/
我刚遇到 MSVC(版本 12 更新 5)的问题: 如果模板函数具有通过 SFINAE 禁用的重载,则显式实例化模板函数会失败。但是,调用该函数(从而隐式实例化它)是有效的。 示例代码: #inclu
我正在阅读一本关于 DI 的书,该书总是谈论 DI 框架“实例化对象图”。为什么这样说而不是“实例化对象”? 最佳答案 对象图由保存彼此引用的对象组成。在这种情况下,图的另一个名称是网络。 如果 IO
一个类Customers实例化许多其他类(例如CustomersFromMysql、CustomersFromPostgeSQL),所有查询数据库都返回客户名称。现在,这些客户名称返回为例如 name
当我尝试调用 listenEventReducer 时,出现了这个奇怪的错误。该方法知道类型,但仍然不确定我哪里出错了。 import 'package:test/test.dart'; enum O
我正在尝试使用 org.hibernate.Interceptor.instantiate() 来拦截实例化(显然)并使用默认构造函数之外的构造函数手动实例化特定对象。如果要阅读此方法的 JavaDo
public class TestingClass { public static void main(String[] args) { int numberRooms = 6
为什么 C++ 以这样的方式创建,如果您有一个类 A 并声明一个类型 A 的数组,那么整个数组将填充使用该类的默认构造函数实例化的对象? 最佳答案 因为当您创建一个给定大小的数组时,数组的每个元素都必
考虑下面的例子 template struct S { A a; void foo() {} }; template void bar() { S *p = 0; } templat
Note that code is instantiated only for member functions that are called. For class templates, membe
当我尝试运行这段代码时: import java.io.*; import java.util.*; public class TwoColor { public static void ma
每当我尝试在 Unity 3D 中实例化粒子系统时,命令都会定位粒子但不会播放/运行动画。 这是我的代码 GameObject impactGO = Instantiate(impactEffect,
我使用以下代码在 verilog 中实例化二维内存 reg [15:0] data_pattern_even [3:0] = {16'hFFFF,16'hFFFF,16'hFFFF,16'hFFFF
假设我获得了我作为 String 创建的类的名称。 .如何使用该字符串中包含的名称实例化类?我知道它将派生自某个父类,但实际类会有所不同。 最佳答案 var instance : MyClass =
python 的 attrs 包提供了一种在实例化时验证传递的变量的简单方法 (example taken from attrs page): >>> @attr.s ... class C(obje
我收到 java 空指针异常。我无法解决它。我已在 testbase 类中初始化驱动程序,并希望在我的 Testing_TVO 类中使用相同的驱动程序 这是我的测试基类 public class te
我对 Java 编程还比较陌生,可能错过了一些明显的东西,所以请耐心等待。 我正在创建一个程序,该程序使用 Swing API 和 JDesktopPane 来创建 GUI。主屏幕上有一个按钮,上面写
python 的 attrs 包提供了一种在实例化时验证传递的变量的简单方法 (example taken from attrs page): >>> @attr.s ... class C(obje
C++ 模板中的“延迟实例化”是什么意思? 最佳答案 延迟实例化是指直到第一次使用对应的实体时才实例化模板。例如,您有一个模板化函数: template void YourFunction() {
当我阅读 spring 教程时,我发现了这样的内容: LocalChangeInterceptor localChangeInterceptor; localChangeInterceptor = n
我正在实现 unforgettable factory .一切正常,但有一件事:类(class)有时没有注册。 我认为关键部分是 Registrar::registered成员。如果使用它,“真正有趣
我是一名优秀的程序员,十分优秀!