查看: 2685|回复: 3

[已经解决] 有关脚本的疑问

[复制链接]
梦石
0
星屑
4761
在线时间
285 小时
注册时间
2013-10-13
回帖
580
发表于 2014-10-8 14:01:43 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 kvkv97 于 2014-10-8 14:32 编辑

1,常量是不变的符号,它是个量,只能赋值,为什么它还可以被定义?常量的作用域是什么?
2,初始化就是第一次赋值吗? 能初始化的是什么(变量还是常量?或者是方法?函数?)?初始化后还可以进行 再赋值吗?
3,函数和方法有什么区别?  RUBY语言中的定义是什么?它起什么作用的?
4,声明和定义的区别是什么?
能具体说下吗?谢谢了
5,可以说  函数就是方法,或者说 方法 就是函数 吗?
6,条件分歧和循环是不是函数?
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-10-8 14:44:11 | 显示全部楼层
本帖最后由 RyanBern 于 2014-10-8 21:31 编辑

那就通俗地回答一下好了。
1.常量是一种特殊的变量,可以简单地理解为不能改变而固定的量。意思就是说你只能访问它而不能修改它的内容(只读属性)。因此,定义常量的时候必须指明初值,一个常量一旦被定义,就不能再改变它的内容。常量的作用通常是一些固定的参数,这样在参数发生改变时便于统一修改。关于作用域,这个说起来有些麻烦。常量有效的范围是在属于它被定义的层次上,在这以外无效(无法访问)。
  1. CONST1 = 1
  2. module M
  3.   CONST2 = 1
  4.   class A
  5.     CONST3 = 1
  6.   end
  7.   class B
  8.     def fun
  9.       c = CONST1 #合法
  10.       a =  CONST2 # 合法
  11.       b = CONST3 # 非法,CONST3仅在A中有效
  12.       b = A::CONST3 # 合法,利用作用域算符
  13.     end
  14.   end
  15. end
复制代码
这里有三个常量,CONST1在module M和class A层次上以及module M外面的那个层次上都有效,而CONST2 只在module M和class A上有效。CONST3只在class A内部有效。所以在B类内部访问CONST3非法,如果一定要访问,请利用作用域算符'::'
2.初始化就是使用构造方法initialize,通常在initialize执行的时候会指定初值。所有的对象在被定义的时候都要自动调用构造方法对其进行初始化。初始化后能否赋值取决于变量的性质。如果是常量就不能再次赋值。
3.这两个本质上是差不多的,'函数'是C/C++中的称呼,而'方法'更多用在面向对象的语言中。所以在这里就叫方法吧。现在阶段可以不区分他们。
4.Ruby中基本不需要声明,变量,类,方法可以直接使用,这和C/C++/Java等是不同的。
[pre lang="CPP"]#include<iostream>
using namespace std;
extern int a;
int main(){
  cout << a;
  return 0;
}[/pre]
在CPP中,第三行属于外部变量声明,作用就是相当于通知便是其·编译器有一个叫做'a'的外部变量,它在别处定义。这时变量a已经创建。
[pre lang="Java"]public class Test{
  public static void main(String[] args){
    int[] a;
    a = new int[5];
    System.out.println("" + a[0]);
  }
}[/pre]
Java中的对象也必须先声明再定义(实际上是一个空指针对象,没有实体),或者是声明的时候一并定义。
[pre lang="CPP"]int f(int);
int g(int);
int f(int a){
  if (a > 0) return 0;
  else return g(a);
}
int g(int a){
  if (a <= 0) return 0;
  else return f(a);
}[/pre]
在CPP中函数的声明有时候是为了实现两个函数互相调用。
但是Ruby中,变量使用的时候,无需声明。
[pre lang="Ruby"]def fun
  a = 1
  p a
end[/pre]
5.已经说明,感觉没必要纠结这个事情。
6.条件以及循环不是函数,而是流程控制语句。

点评

谢谢大圣解答,基本解疑  发表于 2014-10-8 17:01

评分

参与人数 1梦石 +1 收起 理由
myownroc + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-10-8 20:40:57 | 显示全部楼层
该说的都被说了,所以就补充一下:
方法可以看做是没有返回值的函数,而函数必须有返回值(当然,如果没写return这类东西,在执行函数的时候也会自动返回一个空值)。
不过,在Ruby中,函数和方法的区别不是那么大……

点评

谢谢了,方法名称是小写,而函数可以用大写  发表于 2014-10-9 10:17
Ruby中方法如果不写return返回的是最后一个表达式的值  发表于 2014-10-8 21:30
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-10-9 20:56:12 | 显示全部楼层
看到作用域于是过来凑个热闹说说自己最近学习的知识……

三个作用域门:
module、class、def

以及一种特殊的技术:关键词 扁平化作用域
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部