#!/bin/perl
use Inline Python;
$s = new Sun();
print "SUN: $s\n";
$m = new Moon();
__END__
__Python__
from ephem import Sun as Sun;
from ephem import Moon as Moon;
上面的代码产生:
SUN: <Sun "Sun" at 0x9ef6f14>
Can't bless non-reference value at /usr/local/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi/Inline/Python.pm line 317.
怎么了?我已经用许多其他对象尝试过这个(例如:
from ephem import Observer as Observer;
接着
$o= new Observer();
在我的代码正文中),它适用于我尝试过的所有东西,除了月亮。
编辑(可能无用的信息):
在https://github.com/brandon-rhodes/pyephem/tree/master/libastro-3.7.5:
计算太阳、水星、金星、火星(工作正常)的例程在 vsop87.c 中完成,函数 vsop87()
计算木星、土星等(不起作用的)的例程在 chap95.c 函数 chap95() 中完成
vsop87() “返回” 6 个双精度数组,这似乎是某种球坐标。
chap95() “返回” 6 个双精度数组,它们看起来是笛卡尔坐标,即矩形而不是球形。
plan.c 中的 planpos() 调用上述两个函数之一,具体取决于您选择的行星。奇怪的是 planpos() 将函数结果视为相同(有点),即使它们返回非常不同的东西。
在 planpos() 之后,所有行星都被同等对待。planpos() 由plans() 调用(也在plans.c 中),而后者又由circum.c 中的obj_planet() 调用,然后在circum.c 中也由obj_cir() 调用
obj_planet() 和 obj_cir() 定义行星。由于在 planpos() 之后行星的处理方式相同,因此它们之间应该没有区别。