int f(int, int = 0); //声明一个函数,该函数有2个参数,第二个参数带默认值,返回int类型数据
定义的话则是实际创建一个变量,要为这个变量开辟存储空间。
CPP 代码复制
int a; //定义变量a
int b = 0; //定义变量b,并设定值为0
int a; //定义变量a
int b = 0; //定义变量b,并设定值为0
不管定义的变量有没有初值,这个变量在内存空间中都要占据一定空间。所以定义的变量可以有值,也可以没有值,对于没有值的变量进行操作是非常危险的。在C#中,没有值的变量有专门的类型叫Nullable。
总之,一句话,声明就是告诉你有这样一个东西,定义就是把这个东西直接拿出来给你看(说定义是声明也有道理,因为都拿给你看了,当然是有这个东西)
。不过,还是不明白LZ为什么这么纠结于Ruby的声明,难道真是受C/C++影响?
3.不明觉厉。
4.返回值是作为方法运算结果在方法结束时传递到外部的一个量,参数就是作为方法运行的依照传递到方法内部的变量。所以方法就是根据参数产生结果(返回值)。Ruby中的参数传递方式是“值传递”(Pass by value),意思就是说实际参数传递到方法内部的时候,其实是把参数的值复制了一份,然后供方法使用。这里注意的是,由于Ruby中的数据都是引用型数据,变量的值实际上只是个地址,所以你可以认为传递进去的都是变量的地址。
RUBY 代码复制
def fun(a)
a = nil
end
def fun2(a)
a[0] = 1
end
b = [0]
fun(b)
p b # =>[0]
fun2(b)
p b # =>[1]
def fun(a)
a = nil
end
def fun2(a)
a[0] = 1
end
b = [0]
fun(b)
p b # =>[0]
fun2(b)
p b # =>[1]
注意观察两次p出来的值,可以帮助你理解Pass by value
5.初始化不能单独看,有定义的地方基本都有初始化。由于Ruby中可以使用变量之前可以不声明,所以对突然出现的符号,就一定要赋值来表明它究竟是个什么东西。所以……可以把它理解成一种赋值?
6.空格号起分隔标识符或关键字的作用,圆点运算符'.'也叫做成员访问运算符,通常是对成员变量或者是成员方法的调用。'.'还有一个作用就是表示浮点数的小数点……