array|译:Gamemaker Studio 2.3 语法详解( 四 )
show_debug_message(create_uid);// 0
show_debug_message (create_uid);// 1
show_debug_message(create_uid);// 2
}
静态变量在执行中第一次到达时被初始化 。
functionscr_hello{
// show_debug_message(some); // error - not defined
staticsome ="OK!";
show_debug_message(some);// "OK!""
}
因此 , 静态变量通常位于其各自函数的开头 。
Methods/function 绑定
这个功能与基于 ECMA 语言中的 Function.bind 完全相同 。
一个函数可以被 "绑定 "到某个东西上 , 这将在该函数调用中把自己变成那个值 , 把原来的自己推到其他地方(就像 with 语句那样) 。
这意味着 , 如果你有
// obj_some, Create event
functionlocate{
show_debug_message("I'm at "+string(x)+", "+string(y)+"!");
}
, 你可以同时进行
varinst =instance_create_depth(100,200,0,obj_some);
inst.locate;// 100, 200
varfn =inst.locate;
fn;// also 100, 200!
因为你得到的函数引用是与该实例绑定的 。
一个函数可以被绑定到一个 struct 、一个实例 ID, 或者什么都没有(未定义) 。
没有绑定到任何东西的函数会像 2.3 之前的脚本那样保留 self/other。
然而 , 如果一个函数没有被绑定到任何东西上 , 但你以 some.myFunc 的形式调用它 , 它将被当作被绑定到 some 上 。
自动绑定的工作原理如下:
- 在脚本中的 function name{} 不绑定任何东西 , 保持与 2.3 之前版本的兼容性 。
- 绑定到 self 的 function name{} 使得实例方法的定义更加简单(也就是说 , 你可以在 Create 事件中拥有一系列的函数定义) 。
- static name = function{} 也没有绑定任何东西 , 这很好 , 因为你不希望静态函数绑定到父函数被调用的第一个实例 。
- 任何其他使用 name = function{} 的行为都会被绑定到 self。
总的来说 , 这不仅对实例/结构特定的函数很方便 , 而且还可以 "创建 "与一些自定义上下文绑定的函数
例如 , 你可以写一个函数 , 返回一个生成增量 ID 的函数(就像前面提到的的 static ) , 并且让每个这样的返回函数的 ID 是独立的 。
functioncreate_uid_factory{
var_self ={next:0};
var_func =function{returnself.next++;};
returnmethod(_self,_func);
}
//
varcreate_entity_uid =create_uid_factory;varcreate_network_uid =create_uid_factory;
repeat (3)show_debug_message(create_entity_uid);// 0, 1, 2
show_debug_message (create_network_uid);// 0函数调用
由于现在函数可以存储在任何地方 , 你也可以从任何地方调用它们 。
推荐阅读
- bleu|字节跳动火山翻译上新 38 个稀有语种,翻译能力再升级
- 软件和应用|iOS/iPadOS端Telegram更新:引入隐藏文本、翻译等新功能
- 模型|经逆向工程,Transformer「翻译」成数学框架 | 25位学者撰文
- csdn|[译]C# 是 TypeScript 的最好替补?
- IT|网友反映北京地铁将“站”译为Zhan不妥 官方:统一译法
- Google|Android 13早期编译版本泄露 揭示诸多细节体验调整
- 弯月|[译]用树莓派控制WS2812圣诞树灯饰
- 技术|百度翻译公布十年成绩单:翻译质量提升30个百分点
- 机器人|[原]Web 已死
- 方法论|[译]Objective-C依然占C位,Swift和SwiftUI在iOS 15中的使用情况