无法扩展 F# 中的运算符?

2023-12-02

module FSharp=
let Point2d (x,y)= Point2d(x,y)
let Point3d (x,y,z)= Point3d(x,y,z)
type NXOpen.Point3d with
    static member ( * ) (p:Point3d,t:float)= Point3d(p.X*t,p.Y*t,p.Z*t)
    static member ( * ) (t:float,p:Point3d)= Point3d(p.X*t,p.Y*t,p.Z*t)
    static member (+) (p:Point3d,t:float)= Point3d(p.X+t,p.Y+t,p.Z+t)
    static member (+) (t:float,p:Point3d)= Point3d(p.X+t,p.Y+t,p.Z+t)
    static member (+) (p:Point3d,t:Point3d)= Point3d(p.X+t.X,p.Y+t.Y,p.Z+t.Z)

let a=Point3d (1.,2.,3.)
let b=1.0
let c=a * b//error

错误15:类型“float”与类型不匹配
'Point3d' E:\Work\extension-RW\VS\extension\NXOpen.Extension.FSharp\Module1.fs 18 13 NXOpen.Extension.FSharp

我想扩展 Point3d 方法,一些新的运算符。但它并没有过去。


If the Point3d类型是在无法修改的单独程序集中声明的,那么(不幸的是)无法实现标准运算符的新重载,例如+ or *。您问题中的代码将运算符添加为扩展方法,但 F# 编译器在查找重载运算符时不会搜索扩展方法。

如果您无法修改库,那么您可以执行以下三件事:

  • 创建一个包装器Point3d存储的值为Point3d并实现所有运算符
    (但这可能效率很低)

  • 定义不与内置运算符冲突的新运算符。例如,您可以使用+$ and $+用于从左侧和右侧乘以标量。要声明这样的运算符,您可以编写:

    let (+$) (f:float) (a:Point3d) = (...)
    
  • 实施你自己的Point3d完成所有工作的类型,可能带有将其转换为的转换函数Point3d当您需要致电图书馆时。

很难说哪个选项是最好的 - 第二种方法可能是最有效的,但它会让代码看起来有点难看。根据您的情况,选项 1 或 3 也可能有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法扩展 F# 中的运算符? 的相关文章

随机推荐

  • 如何在powershell中的正则表达式中插入变量

    我试图查看文件中是否存在某些输入的条目 因此我使用正则表达式来查询每一行 cat file where match script fileName 其中 fileName 是其他地方定义的一些输入 如何更改正则表达式以插入变量而不是匹配 f
  • 空手道:[主要] INFO com.intuit.karate - karate.env 系统属性为:null [重复]

    这个问题在这里已经有答案了 在尝试使用生成的令牌执行下一个场景时 在令牌身份验证流程之后出现错误 主要 INFO com intuit karate 空手道系统属性为 null 我使用了以下代码 特征文件 Feature Login Tok
  • Python项目结构和相关导入

    我是Python新手 我在谷歌上搜索了很多 并阅读了一些有关相对导入等的文章 尽管事实上我无法让它工作 请考虑我的以下项目结构 Project docs log prev src a py tests tests1 b py tests2
  • 直接从无头图像字节数组创建缩略图

    我的应用程序一次显示大量图像缩略图 目前 我将所有全尺寸图像保留在内存中 并简单地在 UI 中缩放图像以创建缩略图 但是 我宁愿只在内存中保留小缩略图 并且仅在必要时加载全尺寸图像 我认为这很容易 但与仅在 UI 中缩放全尺寸图像相比 我生
  • 您的凭据不允许访问此资源 Twitter API 错误

    我正在研究 Twitter api 一些 api 得到了响应 但statuses home timeline jsonapi 和其他 api 没有得到响应 出现错误 errors code 220 message Your credenti
  • 从 AEM 下载包后如何在 Eclipse 中使用它

    我从包管理器中从正在运行的 AEM 实例下载了一个 zip http localhost 4502 crx packmgr index jsp 解压缩后的 zip 文件包含 jcr root and META INF 我想在此 zip 文件
  • 如何自动允许 IE 中阻止的内容?

    我使用下面的代码作为示例菜单
  • 水平和垂直滑动的动态视图

    请检查上面的视图 我必须相应地创建一个视图 当我们从左向右滑动时 图像将与从右向左滑动相同 当我从上到下滑动时 将会出现网络视图 并且从下到上滑动图像将会出现 所有数据 例如图像和网址 都是动态的 并且数据将来自服务器 我还必须在其中应用拉
  • JAXB 将循环引用映射到 XML

    我有一个包含循环的对象图 我如何让 JAXB 处理这个问题 我尝试使用 XmlTransient子类中的注释 但 JAXB 编组器仍然检测到循环 Entity XmlRootElement public class Contact Id p
  • 如何让函数执行得更快?

    我有以下功能 https i stack imgur com yXA67 png where mu是矩阵 n X 行和 n Y 列 d X 和 d Y 是距离矩阵 在 R 中实现此函数的一种方法是 H mu lt function mu d
  • jQuery.noConflict() 破坏插件

    我在 Rails 应用程序中同时使用 Prototype 和 jQuery 为了解决 冲突我执行以下操作 这大部分工作正常 但我正在尝试使用a plugin不喜欢它并抛出一个 is not a function type error 我能做
  • 为什么 Node.js 没有原生 DOM?

    当我发现这一点时Node js 使用 V8 JavaScript 引擎构建 我想 太好了 网页抓取会随着页面变得更容易 将像在浏览器中一样呈现 带有 支持 XPath 和任何 AJAX 调用的 本机 DOM 执行的页面 为什么它使用与 Ch
  • 使用 Android 拍照时出现问题(垂直相机 | 肖像)

    使用以下代码显示相机的垂直预览 它的工作原理 但 我得到一张风景照片 我如何垂直构建它 我有垂直预览视图 但无法垂直保存图片 问候和感谢 弗兰 ONCLICK public void onClick View arg0 camera tak
  • 使用多线程的JPA持久化

    当我尝试使用持久化对象时遇到问题多线程 细节 假设我有一个对象PaymentOrder其中有一个列表PaymentGroup 一对多关系 和PaymentGroup包含一个列表CreditTransfer 再次是一对多关系 由于数量Cred
  • Keras ValueError:尝试将模型加载到另一个平台时未知层:名称

    我在 Nvidia Quadro 板上使用 Keras 2 2 4 训练了一个卷积神经网络 我已将经过训练的模型保存在两个单独的文件中 一个文件 model json 描述架构 另一个文件 model h5 包含所有权重 我想在运行 Ker
  • 从一系列繁忙时间范围中获取可用时间范围

    假设你有一个数组BUSY会议的时间范围 start 9 00 AM end 10 00 AM start 12 00 PM end 2 00 PM start 5 00 AM end 7 00 PM 我想得到一组回报可用的24 小时范围内的
  • ModelForm 中 FileField 上传的进度条 (Django)

    我正在寻找一些实现文件上传进度条的指针 该进度条提供有关 ModelForm 内 FileField 上传当前状态的反馈 我的 ModelForm 有很多字段 不仅仅是 FileField 我想用进度条显示进度的实时反馈 Thanks 这是
  • IVY Build,如何在项目中使用extlib目录?

    有几个 jar 文件 它们来自我们保存在项目根目录下的项目 extlib 文件夹中的 COTS 产品 我想将这些包含在 ivy 中 但不放入存储库中 只需从 project extlib 文件夹中读取 这是可能的还是我需要将它们添加到工件中
  • 有没有什么解决方案可以在模拟器(Android)中运行Google Plus Posting(分享互动帖子)

    我正在 Android 应用程序中集成 Google Plus 但是在模拟器中的 Google Plus 上共享帖子时遇到了问题因为It requires Google Plus installed on Emulator 但我们无法在模拟
  • 无法扩展 F# 中的运算符?

    module FSharp let Point2d x y Point2d x y let Point3d x y z Point3d x y z type NXOpen Point3d with static member p Point