#!/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;
Đoạn mã trên sản lượng:Perl của thất bại trên pyephem
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.
Có chuyện gì vậy? Tôi đã thử điều này với nhiều đối tượng khác (ví dụ:
from ephem import Observer as Observer;
và sau đó
$o= new Observer();
trong cơ thể của mã của tôi) và nó hoạt động tốt cho tất cả mọi thứ tôi đã cố gắng TRỪ Moon.
EDIT (có thể là thông tin vô dụng):
Trong https://github.com/brandon-rhodes/pyephem/tree/master/libastro-3.7.5:
Các thói quen tính Sun, Mercury, Venus, Mars (những mà làm việc tốt) được thực hiện trong vsop87.c , function vsop87()
Các thói quen để tính Jupiter, Saturn, v.v. (số không hoạt động) được thực hiện trong chap95.c, hàm chap95()
vsop87() "trả về" một mảng gồm 6 đôi, có vẻ như là một số tọa độ hình cầu .
chap95() "trả về" một mảng gồm 6 đôi, có vẻ là tọa độ Descartes, tức là hình chữ nhật và KHÔNG hình cầu.
planpos() trong plan.c gọi một trong hai hàm ở trên, tùy thuộc vào hành tinh bạn chọn. Điều kỳ lạ là planpos() xử lý các kết quả chức năng giống nhau (loại), mặc dù chúng trả lại những điều rất khác nhau.
Sau planpos(), tất cả các hành tinh đều được xử lý giống nhau. planpos() là gọi bằng kế hoạch() (cũng trong plans.c), đó là lần lượt gọi bằng obj_planet() trong circum.c mà sau đó được gọi bằng obj_cir() cũng trong circum.c
obj_planet() và obj_cir() xác định hành tinh. Vì các hành tinh là được xử lý giống nhau sau planpos(), nên không có sự khác biệt giữa chúng.
Jupiter và Saturn cũng không hoạt động, nhưng Mercury và Venus hoạt động. Ba không làm việc bằng cách nào đó đặc biệt-cased trong mã python. –
Tôi cũng đã thử Mars trước đó, và nó hoạt động. Tôi không biết nếu có bất kỳ mã Python ... Tôi nghĩ rằng các công cụ Python chỉ là bindings vào một thư viện C, libastro. – barrycarter
Có một số mã python keo, trên hệ thống của tôi trong '/usr/local/lib/python2.7/site-packages/ephem/__ init __. Py'. Tôi thấy việc xử lý đặc biệt cho Mặt Trăng, Sao Mộc và Sao Thổ ở đó. Bình luận nói rằng "Bây giờ chúng ta thay thế hai trong số các lớp mà chúng ta vừa tạo ra, bởi vì _libastro thực sự cung cấp các kiểu riêng biệt cho hai cơ quan." –