defined在函数内对变量判断无效

我的代码如下:

def test_add_record(){
  if(defined(`shared_test1,SHARED)){
     print("=========================进入raw_skx_tt3备份=========================")
     raw_skx_tt3 = shared_test1  }
  if(defined(`raw_skx_tt3)){
      print("=========================进入raw_skx_tt3 unionAll=========================")
  }
}
test1 = table(`XOM`GS`AAPL as id, 102.1 33.4 73.6 as x);
share(test1,`shared_test1)
test_add_record()

我执行后,只打印了“=========================进入raw_skx_tt3备份=========================”,也就是说第2个if分支没进入,为什么?

attachments-2021-06-nDoCStNS60cc52ee243b3.png

请先 登录 后评论

1 个回答

wale

DolphinDB中对脚本语句的执行分成三个阶段:预解析->解析->执行

1、预解析: 扫描函数定义;

2、解析: 注册所有变量,检查脚本中的语法错误及使用未定义变量等异常

3、执行: 生成动态变量及执行脚本。

注意在脚本解析时会事先将脚本中的变量进行注册,因此不能用define判断已经注册的变量是否被定义,

上述代码在解析阶段,raw_skx_tt3还未定义,所以defined(`raw_skx_tt3)为false,可以用bjs(true).name.find(`raw_skx_tt3)来判断表是否已定义。

请先 登录 后评论