概述
Godot的静态函数从3.4版本一直用到现在的4.3,也曾经编写过不少的静态函数库。
但是一直没怎么用过静态变量。这几天有心重新开发一下静态网页生成器。需要编写一些类,还有保存HTML页面或局部的模板字符串以及生成函数。静态变量就刚好用上了。
这里只做可能性展示,你也可以在自己的程序或项目中使用类似的思路。
对于静态变量的小测试
有点不自信,编写个小脚本测试一下:
@tool
extends EditorScript
class Test:
static var txt:= "哈哈哈哈"
static func get_txt():
return txt
func _run() -> void:
print(Test.txt)
print(Test.get_txt())
测试结果是:
- 的确可以在静态函数中使用类的静态变量
- 外部脚本也可以访问和使用类的静态变量
这两项结果也是下文存在的前提。
模板静态函数库
起名是个头大的问题,“模板静态函数库”或者“静态模板函数库”都差不多。
本质都是一个静态函数库,也就是只有静态变量和静态方法的类。
# 模板和生成函数库
class_name WebTmps
static var basic_tmp:String = """<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>【title】</title>
【head】
</head>
<body>
【body】
</body>
</html>"""
static func basic_page(title:String,head:String,body:String) -> String:
var page = basic_tmp
page = page.replace("【title】",title)
page = page.replace("【head】",head)
page = page.replace("【body】",body)
return page
在上面的静态函数库中,我申明了一个名为basic_tmp
的静态变量,以多行字符串的形式存储一个最基础HTML5网页的模板字符串。
然后编写了一个有三个参数的静态方法,用来调用静态变量basic_tmp
存储的模板,并进行字符串替换,获得一个具体的网页内容字符串。
在类中使用
下面是我设计的静态网页页面基类:
# 静态网页页面基类
class_name WebPage
var title:String="" # 页面标题
var head:String="" # <head>部分
var body:String="" # <body>部分
func to_html() -> String:
return WebTmps.basic_page(title,head,body)
可以看到:
- 外部类或脚本可以通过
WebTmps.basic_page()
获取替换文本后的页面字符串,用来生成一个简单的网页。 - 好处就是,具体的网页类当中就不需要存储模板字符串了,可以大大简化代码
- 而静态模板函数库中,可以以静态变量形式存储大量的模板字符串,以及对应的参数形式的转化函数
- 静态模板函数库自身可以独立存在并不断扩展,可以随时用于新的项目
总结
- 这只是一个基础演示,后续会在实际编写中总结新的经验