/
Quarkdown 是动态类型的:每一个可能被传递给函数参数的值,都被包裹在一个 DynamicValue 对象中。这个对象可以表示任何受支持的类型,并且携带着在需要时将其转换为期望类型所需的信息。
随后,这个动态值会在调用时被适配或转换为原生函数(用强类型的 Kotlin 编写)签名所期望的类型。如果无法完成转换,就会发生错误。
这种在调用时进行适配的机制减少了限制,使得同一个值可以根据其上下文而被不同地处理。
.var {myvar} {true}
.if {.myvar}
My value is .uppercase {.myvar}My value is TRUE
在上面的示例中:
.var 的签名接受一个 DynamicValue。.if 接受一个 Boolean ,因此保存在 myvar 变量中的动态 true 值被转换为布尔值。.uppercase 接受一个 String,因此 true 值被当作字符串使用。请参阅本维基的值类型章节,了解所有受支持的类型。
下面的示例是本维基中定义的一个函数的简化版本,它展示了一段 Quarkdown 代码片段及其正下方的可视化结果:
.function {sourceresult}
source:
.code {markdown}
.source
.source
.sourceresult
##! Quarkdown
Quarkdown was born in **.sum {2000} {24}**##! Quarkdown
Quarkdown was born in **.sum {2000} {24}**Quarkdown was born in 2024
前面的示例展示了 Quarkdown 的值是多么通用。在函数声明中,.source 参数被获取了两次:
.code 中,它期望一个字符串,因此源码被原样读取并插入到代码块中。