Project1

标题: 再问Ruby脚本问题 [打印本页]

作者: kvkv97    时间: 2014-10-9 10:23
标题: 再问Ruby脚本问题
本帖最后由 kvkv97 于 2014-10-9 11:58 编辑

1,声明不包括定义,但定义包括声明,怎么理解,请举个例子说下?
2,是否声明就是赋值?或者 赋值就是声明?总之,声明和定义`赋值的概念上的区别是什么(我是看到 手册 上把定义说成赋值才怎么说的——在常数说明部分)?
如果2成立那么3,定义包括声明吗?
3,对象实例和对象是否同一概念?对象实例和实例是否同一概念?
4,什么是返回值,什么是参数?参数传递是什么意思?
5,初始化是一种定义吗还是 赋值?
谢谢大神们了!
6,再问下空格号和  .   (点)号的 计算机 程序上的意义?
作者: 喵呜喵5    时间: 2014-10-9 12:43
..........看的头晕所以借楼问一下,ruby是如何实现只定义不赋值......
以及ruby中的声明又是什么......
再以及,对象实例又是什么......只听过XX对象的实例......
初始化又是什么...难道指的是未定义的统统nil么...
空格号和点不就是单纯的字符么...因为ruby不用在换行时加分号所以依赖空白符来判断一句代码是否结束...
作者: RyanBern    时间: 2014-10-9 18:24
1.其实可以不用纠结这个事情,不过我想知道为什么LZ学习Ruby会想到“声明”和“定义赋值”,因为Ruby中的变量无需声明就可以直接使用。
声明的作用就是相当于告诉编译器这个符号是什么意思,比方一个标识符'f',到底是整数,还是一个返回整数的函数。声明的时候这个标识符没有实体,不过在后文中可以引用。不过这种没有实体的标识符在程序运行的时候就会出错,所以要想程序正常运行,必须把用到的标识符都实体化。
CPP 代码复制
  1. class Person; // 声明一个类
  2. extern int a; //声明一个外部全局变量a
  3. ostream& operator<<(ostream&, Person&); //声明'<<'运算符的重载
  4. int f(int, int = 0); //声明一个函数,该函数有2个参数,第二个参数带默认值,返回int类型数据

定义的话则是实际创建一个变量,要为这个变量开辟存储空间。
CPP 代码复制
  1. int a; //定义变量a
  2. int b = 0; //定义变量b,并设定值为0

不管定义的变量有没有初值,这个变量在内存空间中都要占据一定空间。所以定义的变量可以有值,也可以没有值,对于没有值的变量进行操作是非常危险的。在C#中,没有值的变量有专门的类型叫Nullable。
总之,一句话,声明就是告诉你有这样一个东西,定义就是把这个东西直接拿出来给你看(说定义是声明也有道理,因为都拿给你看了,当然是有这个东西)
。不过,还是不明白LZ为什么这么纠结于Ruby的声明,难道真是受C/C++影响?
3.不明觉厉。
4.返回值是作为方法运算结果在方法结束时传递到外部的一个量,参数就是作为方法运行的依照传递到方法内部的变量。所以方法就是根据参数产生结果(返回值)。Ruby中的参数传递方式是“值传递”(Pass by value),意思就是说实际参数传递到方法内部的时候,其实是把参数的值复制了一份,然后供方法使用。这里注意的是,由于Ruby中的数据都是引用型数据,变量的值实际上只是个地址,所以你可以认为传递进去的都是变量的地址。
RUBY 代码复制
  1. def fun(a)
  2.   a = nil
  3. end
  4. def fun2(a)
  5.   a[0] = 1
  6. end
  7. b = [0]
  8. fun(b)
  9. p b # =>[0]
  10. fun2(b)
  11. p b # =>[1]

注意观察两次p出来的值,可以帮助你理解Pass by value
5.初始化不能单独看,有定义的地方基本都有初始化。由于Ruby中可以使用变量之前可以不声明,所以对突然出现的符号,就一定要赋值来表明它究竟是个什么东西。所以……可以把它理解成一种赋值?
6.空格号起分隔标识符或关键字的作用,圆点运算符'.'也叫做成员访问运算符,通常是对成员变量或者是成员方法的调用。'.'还有一个作用就是表示浮点数的小数点……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1