drtwqc3744 2015-07-28 08:40
浏览 83
已采纳

如何使用可选参数对PHP函数进行类型推断

The thing with PHP is that it doesn't have a specific syntax when using a function with optional arguments. This:

foo(10);

can either be this

function foo($a) {}

or this

function foo($a = 0) {}

or this

function foo($a, $b = 0, ...) {}

(or even function foo() {}, but disregard that for now).

So how do we type-infer it when a function is used before it's defined?

One solution is to record all usages until the definition comes, and then see if they all can unify with it. The example above would then store

int -> unit

and later check if it's compatible with

int -> (typ list) -> unit

or whatever (where typ list is the list of optional arguments).

You think this could work? Are there other conventional ways to deal with this?

  • 写回答

2条回答 默认 最新

  • doukang5966907 2015-07-28 10:12
    关注

    You'll probably have to either insert "weak" type variables and keep them until function definition is found, or first build a complete AST and then run it through the type inference and raise an error if there are functions whose definitions are unknown (I wonder how would you about built-in functions, perhaps use pre-baked type signature database?).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?