1

如果我说:

x = "ABC"

这似乎是一个声明、定义和赋值,所有这些都是同时发生的,无论我之前是否在程序中说过关于 x 的任何内容。

它是否正确?

我不确定 Ruby 中用于声明、定义和分配的正确术语是什么,或者由于 Ruby 中的动态类型,这些东西之间是否存在区别。

@tg:关于您的第 2 点:即使 x 在 x = "abc" 语句之前存在,您不能将 x = "abc" 语句称为定义/重新定义吗?

4

2 回答 2

7
  1. 声明:
    。谈论在 Ruby 中声明变量是没有意义的,因为在语言中没有任何类似于声明的东西。为编译器设计的语言有声明,因为编译器需要提前知道大数据类型是什么以及如何访问它们的不同部分。 例如,如果我在 C 中说:

    int *i;
    

    然后编译器知道某处为 i 预留了一些内存,并且它与保存指向 int 的指针一样大。最终链接器会将所有引用挂钩i在一起,但至少编译器知道它在某个地方。

  2. 定义: 大概
    定义通常为某些东西设置一个初始值(至少在熟悉的编译语言中)。如果x在语句之前不存在x = "abc",那么我想您可以将其称为定义,因为那是 Ruby 必须为 symbol 赋值的时候x

    不过,同样,定义是人们通常用来区分对某个变量的初始静态赋值与该变量的声明的特定术语。在 Ruby 中,您没有那种声明。如果变量在当前范围内的某处被分配了一个值,您通常只会说它已定义,如果没有,您会说它是未定义的。

    您通常不会谈论它有一个定义,因为在 Ruby 中这只是赋值。没有特殊的上下文可以证明您可以像其他语言一样使用定义。

    这让我们...

  3. 作业: 是的。
    您绝对可以称其为赋值,因为它为符号赋值x。我认为没有人会不同意这一点。

于 2009-03-23T03:53:34.743 回答
0

差不多。如果,在下一行,你这样做:

x = 1

然后你刚刚重新定义了它,并分配了它(它现在是一个整数,而不是一个字符串)。Duck 打字与您可能习惯的打字非常不同。

于 2009-03-23T03:53:09.643 回答