如果我说:

x =“abc”

这看起来像是同时进行的声明、定义和赋值,无论我之前是否在程序中说过有关 x 的任何内容。

它是否正确?

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

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

有帮助吗?

解决方案

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

    int *i;
    

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

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

    不过,再说一次, 定义 是一个特定术语,人们通常用来区分对某个变量的初始静态赋值与该变量的声明。在 Ruby 中,没有这种声明。你通常只是说一个变量是 定义的 如果它在当前范围内的某个地方被分配了一个值,并且您说它是 不明确的 如果还没有。

    你通常不会谈论它 定义, ,因为在 Ruby 中这相当于 任务. 。没有特殊的背景可以证明你说的是 定义 就像其他语言一样。

    这让我们...

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

其他提示

差不多。如果,在非常下一行,你做的:

x = 1

然后您刚刚重新定义它,以及分配它(它现在是一个整数,而不是一个字符串)。鸭子类型是什么你可能习惯非常不同的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top