设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2311|回复: 3
打印 上一主题 下一主题

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
跳转到指定楼层
1
发表于 2014-10-8 14:01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

1,常量是不变的符号,它是个量,只能赋值,为什么它还可以被定义?常量的作用域是什么?
2,初始化就是第一次赋值吗? 能初始化的是什么(变量还是常量?或者是方法?函数?)?初始化后还可以进行 再赋值吗?
3,函数和方法有什么区别?  RUBY语言中的定义是什么?它起什么作用的?
4,声明和定义的区别是什么?
能具体说下吗?谢谢了
5,可以说  函数就是方法,或者说 方法 就是函数 吗?
6,条件分歧和循环是不是函数?

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 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等是不同的。
CPP 代码复制
  1. #include<iostream>
  2. using namespace std;
  3. extern int a;
  4. int main(){
  5.   cout << a;
  6.   return 0;
  7. }

在CPP中,第三行属于外部变量声明,作用就是相当于通知便是其·编译器有一个叫做'a'的外部变量,它在别处定义。这时变量a已经创建。
JAVA 代码复制
  1. public class Test{
  2.   public static void main(String[] args){
  3.     int[] a;
  4.     a = new int[5];
  5.     System.out.println("" + a[0]);
  6.   }
  7. }

Java中的对象也必须先声明再定义(实际上是一个空指针对象,没有实体),或者是声明的时候一并定义。
CPP 代码复制
  1. int f(int);
  2. int g(int);
  3. int f(int a){
  4.   if (a > 0) return 0;
  5.   else return g(a);
  6. }
  7. int g(int a){
  8.   if (a <= 0) return 0;
  9.   else return f(a);
  10. }

在CPP中函数的声明有时候是为了实现两个函数互相调用。
但是Ruby中,变量使用的时候,无需声明。
RUBY 代码复制
  1. def fun
  2.   a = 1
  3.   p a
  4. end

5.已经说明,感觉没必要纠结这个事情。
6.条件以及循环不是函数,而是流程控制语句。

点评

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2744
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

3
发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

4
发表于 2014-10-9 20:56:12 | 只看该作者
看到作用域于是过来凑个热闹说说自己最近学习的知识……

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

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-21 16:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表