【问题标题】:What is programming language support define your own custom operator?什么是编程语言支持定义您自己的自定义运算符?
【发布时间】:2017-12-22 05:03:03
【问题描述】:

我知道很多语言、C++、Python 等都支持运算符重载,我们可以重新定义标准运算符,如 +。但是如果我们需要添加新的操作符呢?

【问题讨论】:

  • 您要添加什么“运算符”?
  • 在许多语言中,如果没有外部库,这是不可能的(我知道这对于 C++ 来说是正确的)。那么,我想知道一个新的运算符是否应该只是一个函数。您可以在这里找到更多信息:stackoverflow.com/questions/8425077/…
  • 为什么你在没有任何评论的情况下对问题投反对票?
  • 所以我们可以制作<3 运算符? :)
  • 您的问题是什么?如何在c++ 中定义一个新的运算符?在python?为什么这个问题被标记为math

标签: python c++ math operator-overloading operators


【解决方案1】:

我认为该功能没有任何语言。 但是您始终可以创建自己的解释器或类似的东西,以处理您的自定义代码并将其转换为所需语言的代码。 作为最简单的变体,您可以编写一个工具(甚至是 IDE 的扩展),它会找到类似

return_type operator$(typename arg1, typename arg2);

并插入类似

的内容
return_type reloaded_operator_dollar(typename arg1, typename arg2);

在它的位置。 转型也是如此

auto result = arg1 $ arg2;

进入

auto result = reloaded_operator_dollar(arg1, arg2);

upd: 看来,FORTH 和 Haskell 都有这样的功能。感谢 Neil Butterworth 提供的信息。

【讨论】:

  • “我认为没有任何语言具有该功能” - FORTH,Haskell?
  • stackoverflow.com/questions/2210854/… 似乎也是 F#。但两者都很实用。
  • @DmitrySokolov 看起来更像是简单的重载。因为只有符号!%&*+-./<=>@^|~ 可以启动运算符。换句话说,它不会很“新”。
【解决方案2】:

C++ 和 Python(C++Python)都不支持重载“新”运算符(尽管 C++ 确实支持重载 new 运算符)。不过,重载运算符只是语法糖——您总是可以定义一个成员函数,将其命名为比单个字符运算符更能解释其行为的名称,然后调用它。

确实存在可以做到这一点的语言:例如 Haskell,一种漂亮的语言,它允许您定义自己的运算符,方法是在名称中使用符号并用括号括起来,例如:

(!!!) :: [a] -> Integer -> a
(x:xl) !!! 0 = x
(_:xl) !!! n = xl !!! (n-1)
    _  !!! _ = error "Index out of bounds"

(注意这只是对标准!!函数的重新定义,我没有想象力……)

【讨论】:

  • 这适用于 unicode 符号吗?我真的很想写这样的东西: foo = a ⛷ b
  • @Maaaaa 取决于解释器是否支持 Unicode - 我刚刚发现的在线解释器 here 不支持,但 GHCi 可能(目前无法测试)。
  • 仅供参考 Scala 也支持自定义运算符
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 2015-09-22
  • 1970-01-01
  • 2011-02-08
  • 2016-05-24
相关资源
最近更新 更多