4

次のコードをコンパイルしようとします。

type
  TPerson = object of TObject
    name*: string 
    age: int

  TStudent = object of TPerson
    id: int

var
  student: TStudent
  person: TPerson

student = TStudent(name: "Anton", age: 5, id: 2)

しかし、次のエラーが表示されます。

エラー: 宣言されていないフィールド: 'id'

どのようにid宣言されていませんか?コード サンプルは、チュートリアルから直接引用したものです。チュートリアルに反映されていない言語の変更はありましたか?


また、次のコードを実行しようとすると:

student = TStudent(name: "Anton")
echo student.name

次のエラーが表示されます。

SIGSEGV: 不正なストレージ アクセスです。(nil から読み取ろうとしていますか?)

なんで?

4

1 に答える 1

3

残念ながら、 Nimrodの最後の安定版リリース(バージョン 0.9.2 は 2013 年 5 月にリリースされました) または古い git チェックアウトを使用している可能性が高く、ハイライトしているのはコンパイラーのバグです。現在、git バージョンhttps://github.com/Araq/Nimrod/commit/75ca6eb34fbc983d88961664fd1cfce5f8b44abfでは、最初と最後の例の両方が問題なく動作します。過去数か月で、言語のオブジェクト継承に関連するいくつかのバグが修正されました (問題 179問題 520問題 575および問題 563 )。

自分で git バージョンをビルドすることに決めた場合 (言語にリグレッションが発生することもありますが、まったく怖くありません) 、ウェブサイトがまだ更新されていない可能性があるため、git のビルド手順を使用してください。

于 2013-11-03T09:08:27.247 に答える