Fastly VCLの文法があまりにもアレなのでメモ

2024-02-28T14:33:33.000Z

数値系のみなさま

INTEGER, FLOAT, RTIME

RTIMEとは何かというと、リンク踏んでもらったほうがわかりやすいがRelative Timeで 1d (1日) とか表すことができる。

↓ :angry:

declare local var.integer INTEGER;
// ok
set var.integer = 1;
// **NG**
set var.integer = - 1;

declare local var.float FLOAT;
// ok
set var.float = -1;
// **NG**
set var.float = - 1;

declare local var.rtime RTIME;
// ok
set var.rtime = -1m;
set var.rtime = - 1m;
set var.rtime = -1 m;
set var.rtime = - 1 m;
ssssota

メモ RTIMEの数値には、整数、少数、指数、16進数のいずれも使える

ssssota

Expressionも奇々怪々だ。

sub return_bool BOOL {
  return false || (true && true);
}
sub return_bool2 BOOL {
  declare local var.test BOOL;
  return var.test && return_bool();
}
sub return_bool3 BOOL {
  declare local var.t TIME;
  set var.t = std.time("Fri, 21 Aug 1981 14:51:07 GMT", now);
  declare local var.t2 TIME;
  declare local var.test BOOL;
  declare local var.test2 BOOL;
  declare local var.test3 BOOL;
  return var.test || time.is_after(var.t,var.t2) || ((var.test2) || var.test3);
}
sub hoge {
  declare local var.bool BOOL;
  set var.bool = (return_bool() || true);
}

↑これは全部OK

↓これは全部NG

sub return_bool BOOL {
  return (false || (true && true));
}
sub return_bool2 BOOL {
  declare local var.test BOOL;
  return (var.test) && return_bool();
}
sub hoge {
  declare local var.bool BOOL;
  set var.bool = return_bool() || true;
}
Leave a comment.