- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL;DR 我如何编写一个“重载”函数来处理所有具有单位的数字类型和具有相同单位的单独类型(float32<m> -> Vector2<m>
, int<kg> -> Vector2<kg>
)?
我有一个不错的小 Vector2 类,但我想允许将度量单位附加到它,所以我基本上是这样定义它的(但功能比这里包含的要多得多):
type Vector2<[<Measure>] 'u>(x: float32<'u>, y: float32<'u>) =
member this.X = x
member this.Y = y
我也能够轻而易举地编写重载算术运算符(例如 static member (+) ...
),但我一直在努力编写可以处理所有数字类型的构造函数运算符(称为 @@
)以及单位(允许我写 1<m> @@ 2.5<m>
而不是 new Vector2<m>(1.<m>, 2.<m>)
。在我将单位附加到这个类之前,它真的很容易:
let inline (@@) x y = new Vector2(float32 x, float32 y)
到目前为止,我已经编写了一个辅助类来处理这个问题:
type OverloadedOperators =
static member CreateVector2 (x: float32<'u>, y: float32<'u>) = new Vector2<'u>(x, y)
static member CreateVector2 (x: float<'u>, y: float<'u>) = new Vector2<'u>(x |> float32 |> Float32WithMeasure<'u>, y |> float32 |> Float32WithMeasure<'u>)
static member CreateVector2 (x: int<'u>, y: int<'u>) = new Vector2<'u>(x |> float32 |> Float32WithMeasure<'u>, y |> float32 |> Float32WithMeasure<'u>)
但似乎不可能编写适当的类型约束来处理这种调用情况。例如,这样的事情是行不通的
let inline (@@) (x: 'u when 'u : (static member CreateVector2 : 'u * 'u -> Vector2<'v>)) y = OverloadedOperators.CreateVector2 (x, y)
因为The type 'u is not compatible with float32<'v>
, The type 'u is not compatible with int<'v>
, ETC。我不确定如何写这最后的一小段。我想要的有可能吗?或者我应该忍受不断使用 Vector2
到处都是构造函数?
编辑 感谢@JohnPalmer,我已经非常接近了,我在他的回答的基础上想出了最后一点:let inline vec2 p = convert *** p
.现在最后一步是“取消元组”这个函数,让它成为一个中缀运算符,但这似乎是不可能的,因为它一开始甚至不知道它总是一个元组。我想我可能已经尽可能地使用 F#,但如果我错了请纠正我!与此同时,我将解决 vec2 (10.<m>, 20.<m>)
,这比我每次调用构造函数时都必须内联执行所有困惑的单元类型转换要好很多。
最佳答案
这是一个稍微有点老套的解决方案,它是根据我们在这种情况下使用的标准技巧构建的:
open LanguagePrimitives
type Vector2<[<Measure>] 'u>(x: float32<'u>, y: float32<'u>) =
member this.X = x
member this.Y = y
type OverloadedOperators() =
static member CreateVector2 (x: float32<'u>, y: float32<'u>) = new Vector2<'u>(x, y)
static member CreateVector2 (x: float<'u>, y: float<'u>) = new Vector2<'u>(x |> float32 |> Float32WithMeasure<'u>, y |> float32 |> Float32WithMeasure<'u>)
static member CreateVector2 (x: int<'u>, y: int<'u>) = new Vector2<'u>(x |> float32 |> Float32WithMeasure<'u>, y |> float32 |> Float32WithMeasure<'u>)
static member ( *** ) (T,(x:float32<'u>,y)) = OverloadedOperators.CreateVector2(x,y)
static member ( *** ) (T,(x:float<'u>,y)) = OverloadedOperators.CreateVector2(x,y)
static member ( *** ) (T,(x:int<'u>,y)) = OverloadedOperators.CreateVector2(x,y)
let convert =OverloadedOperators()
(* testing *)
[<Measure>]
type m
convert *** (1<m>,1<m>)
convert *** (1.0<m>,1.0<m>)
它使用两个运算符并且过于冗长,但相当接近您想要的
关于.net - 带有度量单位的重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905649/
背景信息:对于国际销售表中的每一行,我需要检索过去特定日期的美元汇率,以便分析人员确定汇率变化的影响关于销售数字。然后,我将使用今天的汇率与过去的汇率之间的差值,并将其乘以销售额来确定影响。 实际问题
是否可以通过切片器值动态选取表中定义的适当 DAX 度量? 源表: +----------------+------------+ | col1 | col2 | +-
我有一个 ViewFlipper在我的主要 Activity View 上。在 onCreate 我实例化添加到 ViewFlipper 的 View 。之后,我将显示的 child 设置为第一个。当
我正在研究句子类别检测问题。每个句子可以属于多个类别例如: "It has great sushi and even better service." True Label: [[ 0. 0.
谁能帮我一起计算F-measure?我知道如何计算召回率和准确率,但不知道对于给定的算法如何计算一个 F-measure 值。 例如,假设我的算法创建了 m 个集群,但我知道相同数据有 n 个集群(由
我对通过宏精度和手动召回计算宏 f1-score 感兴趣。但结果并不相等。代码中 f1 和 f1_new 的最终公式有什么区别? from sklearn.metrics import precisi
我有一张记录了一些人体重的表格: Year Person Weight 2010 Mike 75 2010 Laura 60 2011 Mike 80 201
df分为训练数据帧和测试数据帧。训练数据帧分为训练数据帧和测试数据帧。因变量Y是二进制(因子),值为 0 和 1。我试图用此代码(神经网络,插入符号包)预测概率: library(caret) mod
我想使用 Hausdorff 距离作为训练指标,但我刚刚找到了 Weighted_Hausdorff_loss并将其用作医学图像分割的指标。 import math import numpy as n
我有一段时间没有使用 R,所以也许我只是不习惯它,但是..我在 R 中有一个表,有两个列,第一个有预测值(值可以是 0 或 1 ),第二个具有实际值(也是 0 或 1)。我需要找到召回率、精度和 f
我正在使用 Collectd 收集系统指标。我正在小范围内收集测量值以获得准确的值。但是我想使用 Statsd 在本地聚合这些值。 Statsd 应该聚合这些值并以更长的时间间隔将它们发送到 libr
我使用SciKit作为一个库来处理分类算法,例如:NB、SVM。 这是一个非常漂亮的binary classification implementation对于“垃圾邮件和HAM”电子邮件:
我正在寻找 MST 启发式算法的严格示例,它是度量旅行商问题的 2 近似算法。 这个算法在网上很容易找到,但我找不到具体的例子。我所说的严格示例是指给定算法返回的解决方案比最佳解决方案差 2 倍的示例
我使用 Data Studio 中的 Case 函数来确定某个值是否高于或低于 6,000 英镑,并根据输出呈现两个数字之一。这两个数字是计算字段。 第一个案例陈述: (大于或小于)- CASE WH
我正在使用 Ganglia + RRDTool为 monitoring a web farm .很多图很清楚,但是当我看到load_one metric , 我 don't have Y-axis l
以下是股票交易数据的简化版本。 StockData = DATATABLE ( "STOCK", STRING, "Date", DATETIME, "Buyer", STRI
我正在尝试将ASP.NET Core 7应用程序中的度量/跟踪发送到Grafana。。这是我的《码头工人》作文文件。。下面是我的收集器配置:。下面是配置OpenTelemeter的服务集合扩展方法。。
我正试图从我的ASP.NET Core 7应用程序向Grafana发送度量/跟踪。。这是我的《码头工人》作文文件。。下面是我的收集器配置:。下面是配置OpenTelemeter的服务集合扩展方法。。首
我是一名优秀的程序员,十分优秀!