查看完整版本: A.1 Ruby程序入口点概念的掌握

quzhongwei 2008-6-9 22:40

A.1 Ruby程序入口点概念的掌握

伱可以用记事本建立一个Ruby程序的源文件,比如a.rb,内容如下:[code]puts "Hello, Ruby"[/code]伱可以用:[code]ruby a.rb[/code]运行这个程序,输出:Hello, Ruby。
这表明Ruby程序的入口点在第一条可执行语句处。
你也可以在源文件中定义如下的一个方法:[code]def Foo
    puts "Hello, World!"
end[/code]运行后输出:[code]Hello, Ruby[/code]这里Foo是方法。
同样,你也可以定义一个类:[code]class A
    puts "A"
    def WoW
        puts "WoW"
    end
end[/code]伱将会发现在类A中,"A"得到了输出,而类A中的WoW方法没有输出。

综上所述,Ruby程序的入口点为:[code]第一条可执行语句[/code]完整的例子如下:[code]puts "Hello, Ruby"

def Foo
    puts "Hello, World!"
end

class A
    puts "A"
    def WoW
        puts "WoW"
    end
end[/code]输出:[code]Hello, Ruby
A[/code]

[[i] 本帖最后由 quzhongwei 于 2008-6-10 00:20 编辑 [/i]]

maninred 2008-6-9 23:45

Ruby的命名规范里,方法是不能用大写字母的吧?就算是其它的OOPL的驼峰式命名也是首字母小写的吧。

quzhongwei 2008-6-9 23:49

是的,首字母小写!
这里只是揭示程序的入口点

drive2me 2008-6-9 23:54

好,俺还没有总结这个入口点呢。
明白了。

谢谢。

lkl 2008-6-10 17:02

我看不懂啊!以往只接触了一点点也。

xavier 2008-6-10 18:21

如果只有方法定义而无调用的话
应该不会有输出的吧?
至少在我这里是这样.....

drive2me 2008-6-10 18:55

[quote]原帖由 [i]lkl[/i] 于 2008-6-10 17:02 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=16595&ptid=5087][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
我看不懂啊!以往只接触了一点点也。 [/quote]

那lkl是谁呀?好奇!

wjpp0000 2008-6-10 22:12

第一条是可执行语句
那在第一条语句处调用方法呢?

quzhongwei 2008-6-10 22:26

[quote]原帖由 [i]wjpp0000[/i] 于 2008-6-10 22:12 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=16605&ptid=5087][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
第一条是可执行语句
那在第一条语句处调用方法呢? [/quote]

方法在后定义的话一般是:
XXX.rb:1: undefined local variable or method `。。。' for main:Object (NameError)
除非调用顶层对象的方法。

tigertank 2008-6-11 10:51

以往的编程语言都是从main()开始的,从第一条可执行语句开始是不一样!!!
谢谢楼主

gongmeihao 2008-6-13 16:51

已理解,努力下一目标。

wbflike 2008-6-16 10:55

不像java那样走main方法运行吗?我还是不懂。

krrish 2008-6-23 12:10

class中的wow不能使用

黑马 2008-6-23 13:11

这地方我不谈入口点,对于楼主使用的代码得到的结果我的解释是,因为
Ruby的定义性代码是[color=Red][size=6]可执行[/size][/color]的
参看我另一遍贴子
[url=http://www.ruby-lang.org.cn/forums/viewthread.php?tid=5162&page=1#pid17107]http://www.ruby-lang.org.cn/forums/viewthread.php?tid=5162&page=1#pid17107[/url]

[[i] 本帖最后由 wtbwtb 于 2008-6-23 13:14 编辑 [/i]]

vintager 2008-7-5 21:33

class A
    puts "A"
    def WoW
        puts "WoW"
    end
end
居然有输出,真是奇怪啊,这不是一个类定义吗,并没有实例化啊?

vintager 2008-7-5 23:29

[code]class A
  def b
    puts "in method b"
  end
  b
end[/code]输出为:undefined local variable or method `b' for A:Class (NameError)
为何?

黑马 2008-7-6 08:30

[quote]原帖由 [i]vintager[/i] 于 2008-7-5 21:33 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=17611&ptid=5087][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
class A
    puts "A"
    def WoW
        puts "WoW"
    end
end
居然有输出,真是奇怪啊,这不是一个类定义吗,并没有实例化啊? [/quote]
我已经用红色放大的文字说明了,你仔细看看好嘛?

dhb008 2008-7-14 15:44

晕了,以前接触C#的 这个程序看了半个小时才 有点明白 是不是太笨了~~~

drive2me 2008-7-14 19:15

[quote]原帖由 [i]dhb008[/i] 于 2008-7-14 15:44 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=17999&ptid=5087][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
晕了,以前接触C#的 这个程序看了半个小时才 有点明白 是不是太笨了~~~ [/quote]

因为它是Ruby,很灵活,看习惯就好了。
会C的人是人精,怎么会笨呀!你会很快就掌握的,我肯定!
加油!:)

alanyuqiang 2008-7-26 00:55

[quote]原帖由 [i]vintager[/i] 于 2008-7-5 23:29 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=17612&ptid=5087][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
class A
  def b
    puts "in method b"
  end
  b
end输出为:undefined local variable or method `b' for A:Class (NameError)
为何? [/quote]
这是因为b是一实例方法,当然不能在里面被调用,要想在里面调用,就加上self.b,这样就变为是类方法了。

黑马 2008-7-27 09:05

前面已经反复说过了,ruby的定义代码即是可执行的。因为它的类(模块)的定义体本身即是一个对象Class类(Module类)的对象。

juzhibest 2008-7-28 09:45

果然受益匪浅

class ClassMethod
  puts "定义性代码都是可执行的!"
  def a()                    #实例方法
    puts " def a() 方法"
  end
  def self.b()               #b类方法
    puts " self.b() 方法"
  end
  def ClassMethod.c()        #c类方法
    puts "ClassMethod.c() 方法"
  end
end

if __FILE__ == $0
  # TODO Generated stub
    ClassMethod.b()           #b类方法
  ClassMethod.c()           #c类方法
  ClassMethod.new.a()       #a实例方法
end

HmilyChen 2008-8-5 01:12

弱弱的问一句,用记事本建完一个a.rb后,在里面写下puts "HelloWorld",并保存.那我该如何执行它呢?

黑马 2008-8-5 12:40

在win下
ruby  a.rb
在linux下
1 ruby a.rb
2    在a.rb的第一行写上 #!/path/ruby  (path改成你的ruby实际路径),然后chmod 755  a.rb,再./a.rb 即可

wscc111 2008-8-6 16:40

3KS 黑馬 大哥!

3KS 黑馬 大哥!3KS 黑馬 大哥!

miqingyang 2008-8-12 16:46

疑问

class A
puts "aa"
def c
  puts "bb"
end
puts "cc"
end
  输出是
aa
cc
  我感觉黑马说的是可执行的可以理解,程序入口点怎么理解呢

zhangxu3739 2008-8-21 14:54

输出的时候为什么一闪就没了啊
  我都没看清楚显示的是什么啊

zhangxu3739 2008-8-21 15:17

class A
   def function
     puts "this is a method"
   end
   def main
      self.function
      end
end

为什么没输出东西来啊
一个类内有个方法 这个方法输出一句话
然后调用这个方法  怎么没输出东西????

黑马 2008-8-25 18:29

ruby不是把main作为主函数的。

njawen 2008-8-26 11:38

虽然对Ruby现在还是一窍不通,但LZ的意思已经明白了。
LZ是要我们区分Ruby和其他语言,Ruby只要遇到可执行语句就会执行,而其他语言必须有个入口方法比如main()
不知道理解是否正确
页: [1] 2
查看完整版本: A.1 Ruby程序入口点概念的掌握