Есть ли языки, которые позволяют юниты? - PullRequest
23 голосов
/ 21 августа 2009

При написании следующего сегодня в C #

DateTime.Now.AddYears(-60)

Я задавался вопросом, существуют ли языки, которые допускают более естественный синтаксис с единицами измерения:

DateTime.Now - 60years

Кто-нибудь знает что-нибудь? В частности, меня интересует присутствие операторов единиц (?), Которые превращают «60 лет» в, например, "TimeSpan.FromYears (60)". Также было бы неплохо иметь возможность определять свои собственные операторы модулей, подобно тому, как вы можете писать операторы преобразования в C #

(Да, я знаю, что TimeSpan не обслуживает годами - это пример.)

Ответы [ 24 ]

0 голосов
/ 21 августа 2009

Я уверен, что это не то, что вы ищете, но в области испытательного и измерительного оборудования было бы весьма необычно, если бы «программа испытаний» включала в себя операторы, работающие с величинами, выраженными напряжением, током или единицы времени.

Хотя это очень специализированный материал, и большинство его едва узнают как языки программирования.

0 голосов
/ 21 августа 2009

PHP функция strtotime () делает это очень хорошо. Он принимает строку и необязательное время в качестве параметров и анализирует строку для определения нового времени.

Примеры:

 $newTime = strtotime('last monday');
 $newTime = strtotime('- 2 days', $originalTime);
 $newTime = strtotime('- 60 years', $originalTime);
 $newTime = strtotime('+ 1 week 1 day', $originalTime);

Подробнее здесь: http://us2.php.net/strtotime

0 голосов
/ 21 августа 2009

Не часть языка, но я видел, как это делалось раньше в C, что-то вроде:

#define NOW     time(0)
#define PLUS    +
#define AND     +
#define MINUS   -
#define SECOND  * 1
#define SECONDS * 1
#define MINUTE  * 60
#define MINUTES * 60
#define HOUR    * 3600
#define HOURS   * 3600
#define DAY     * 86400
#define DAYS    * 86400

time_t waitUntil = NOW PLUS 1 HOUR AND 23 MINUTES;

В то время мне казалось, что это мерзость, в том же классе, что и "#define begin {" и "#define end }" - если вам не нравится, как работает этот язык, используйте другой язык; не пытайтесь согнуть его своей волей таким отвратительным образом.

Это все еще похоже на мерзость, но я уже успокоился в старости и, по крайней мере, могу понять, почему, может быть, кто-то подумал, что это хорошая идея.

0 голосов
/ 21 августа 2009

В Perl вы можете использовать DateTime , который допускает такие вещи как:

my $dt = DateTime->now
$dt->subtract( hours => 1 );
...