使用指南
扩展星盘
把自己的分析规则挂到星盘上——三种编程语言各自的扩展点。
适合:开发者
排盘结果是数据,怎么解读是各家的事。斗数流派众多、判断规则千人千面, 把它们全塞进核心既不可能也不该做。x-iztro 的做法是让你把自己的规则 以方法的形式挂到星盘上,调用语法与内置方法一致。
三种编程语言的扩展点
每种编程语言用它自己最自然的机制,不强行统一成一套:
三者都做同一件事:chart.my_method() 这样调用,且能用上星盘的全部内置能力。
具体写法与可运行示例见各自的页面。
共同的约定
一个例子
三种编程语言实现同一个插件:取命宫主星(空宫借对宫),并读出五行局的局数。
trait MyAnalysis {
fn major_star(&self) -> String;
}
impl MyAnalysis for Astrolabe {
fn major_star(&self) -> String {
let soul = self.palace(Palace::Soul).expect("命宫必然存在");
let source = if soul.is_empty() { soul.opposite_palace() } else { soul };
source.major_stars.iter()
.filter(|s| s.star_type == StarType::Major)
.map(|s| translate_star(s.key, self.language))
.collect::<Vec<_>>().join(",")
}
}
chart.major_star() // 紫微三段代码在同一张盘上都返回 紫微,换成英文盘则都返回 emperor。