1

私が言うなら:

x = "abc"

以前にプログラムで x について何か言ったかどうかに関係なく、これは宣言、定義、代入のすべてが同時に行われているように見えます。

これは正しいです?

Ruby での宣言、定義、および代入の正しい用語が何であるか、または Ruby の動的型付けのためにこれらが区別されているかどうかはわかりません。

@tg: ポイント 2 について: x = "abc" ステートメントの前に x が存在したとしても、x = "abc" ステートメントを定義/再定義と呼ぶことはできませんか?

4

2 に答える 2

7
  1. 宣言: いいえ。言語には宣言に類似するものがないため、Ruby で変数を宣言
    することについて話すのは意味がありません。コンパイラ用に設計された言語には宣言があります。これは、コンパイラが事前にデータ型がどのように大きいか、およびそれらのさまざまな部分にアクセスする方法を知る必要があるためです。 たとえば、Cで言うと:

    int *i;
    

    次に、コンパイラは、i 用に確保されているメモリがどこかにあり、int へのポインタを保持するのに必要な大きさであることを認識します。最終的に、リンカーはすべての参照をiまとめてフックしますが、少なくともコンパイラーはそれがどこかにあることを認識しています。

  2. 定義: おそらく. 通常、定義
    は何か の初期値を設定します (少なくとも使い慣れたコンパイル済み言語では)。ステートメントの前に存在しなかった場合、これを定義と呼ぶことができると思います。これは、Ruby がシンボルに値を割り当てなければならないときだからです。xx = "abc"x

    繰り返しになりますが、定義とは、ある変数への初期の静的な値の割り当てと、その変数の宣言を区別するために人々が通常使用する特定の用語です。Ruby では、そのようなステートメントはありません。通常、現在のスコープのどこかに値が割り当てられている場合は変数が定義されていると言い、そうでない場合は未定義であると言います。

    Ruby では、それは代入に相当するため、通常は定義を持つことについては話しません。他の言語にあるような定義を正当化する特別な文脈はありません。

    それは私たちに...

  3. 割り当て: はい。シンボルに値を代入しているので、これを間違いなく代入
    と呼ぶことができます。それに異を唱える人はいないと思います。x

于 2009-03-23T03:53:34.743 に答える
0

かなり。そして、次の行で次のようにすると:

x = 1

次に、それを再定義し、割り当てました(文字列ではなく整数になりました)。ダックタイピングは、おそらく慣れ親しんでいるものとは大きく異なります。

于 2009-03-23T03:53:09.643 に答える