是否有任何编程语言支持“12.Pounds.ToKilograms()”之类的表达式?[关闭]

Does any programming language support the expressions like "12.Pounds.ToKilograms()"? [closed]

提问人:vikram 提问时间:2/25/2017 最后编辑:Leandro Canigliavikram 更新时间:3/15/2017 访问量:145

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

6年前关闭。

在大多数编程语言中,可以通过一种或另一种方式将单位和测量值从一个系统转换为另一个系统。但是,我们可以用任何编程语言表达类似“12.Pounds.ToKilograms()”的东西吗?

与语言无关 的编程语言 度量单位

评论


答:

0赞 Peter Strachan 2/25/2017 #1

我不能说我曾经认为这是一个有效的表达方式。12 必须定义为一种类型。假设 12 是一个整数。整数类型只知道它是一个整数,在大多数语言中都有内置的整数函数/方法。要使此表达式有效,您需要定义权重类型,并在该对象中定义转换方法或使用转换方法继承子类型。

0赞 bgs 2/25/2017 #2

你可以用 Ruby 来做这件事,因为它的语法糖。

实际上,有一颗红宝石 - 炼金术士 - 你应该去看看。 例如,您可以这样写:10.miles.to.meters

2赞 slebetman 2/26/2017 #3

不完全是该语法,但您可能想看看 Frink: https://frinklang.org

Frink 语法类似于 Google Calculator 或 Wolfram Alpha,但并不完全相同。Google 和 Wolfram Alpha 使用关键字来触发单位转换,而 Frink 则使用运算符。因此,在 frink 中,以下是有效的源代码:in->

    // Calculate length of Wifi antenna:
    lightspeed / (2.4GHz) / 4 -> inches

正如我所提到的,这种语法类似于 Google。作为参考,Google 语法中的相同计算是 .Frink 早于 Google 计算器和 Wolfram Alpha。我第一次意识到 frink 是在 2000 年代初的某个时候。speed of light / 2.4GHz / 4 in inches

弗林克是单位感知的。一个数字总是有单位的,即使这个单位只是“标量”(没有单位)。因此,要声明一个 12 磅的变量,您需要:

var x = 12 pounds

要进行转换,您需要:

x -> kg

或者你可以简单地写出这样的表达式:

12 pounds -> kg
1赞 Leandro Caniglia 3/4/2017 #4

在 Smalltalk 中,您可以将其表示为

12 pounds inKilograms

但是请注意,由您来对消息进行编程(有些库也可以执行此类操作)。但关键的一点是,上面的表达式在 Smalltalk 中是完全有效的(即使这些消息不存在)。poundsinKilograms