`
Inmethetiger
  • 浏览: 108854 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

the book of ruby 第一章

阅读更多

    http://inmethetiger.iteye.com/blog/1715095

    本来打算翻译这本书的,最后还是写了一下摘要。不知道这是原创还是盗版。如果有侵权之类的问题在的话,麻烦告之。

使用ruby非常简单,比如所有语言的第一个程序Hello world。只需在控制台输入

HelloWorld.rb

 

#在控制台打印Helo ruby
 puts "Hello Ruby"

 这样控制台就能输出Hello Ruby。没有类,没有头,甚至没有main函数。

 

如果需要在控制台输入,也可以使用下面的代码:

 

  print 'Enter you name:'
  name = gets
  puts "Hello #{name}"

 其中,print是打印。gets也可以写成gets()。表示接收控制台输入。puts "Hello #{name}"。打印控制台输入的数字。

不过需要指出,puts "Hello #{name}" 不能使用单引号。否则会当成普通字符串输出。

    ruby是大小写敏感的。

 

1:Number

 

subtotal = 100.00
taxrate = 0.175 # one zero only before decimal point
tax = subtotal * taxrate
puts "Tax on $#{subtotal} is $#{tax}, so grand total is $#{subtotal+tax}"

 当然,如果taxrate是字符串(不是number),所以可以使用 to_f函数。如果不能转换,则默认为0.0

 

2:局部变量和全局变量

局部变量 :变量名小写。只在特定过程或函数中可以访问的变量是相对与全局变量而言的

全局变量 :以$开头的变量。全局变量也称为外部变量,作用域从变量定义处开始,到程序结束

 

 

#flienmae variables.rb
#author lyy
#date 2012-11-03
#version 0.1
class Variables
  localvar = "hello"
  $globalvar="goodbye"

  def amethod
    localvar = 10
    puts localvar # =>10
    puts $globalvar # =>goodbye
  end

  def anotherMethod
    localvar = 500
    $globalvar="bonjour"
    puts localvar # =>500
    puts $globalvar # =>bonjour
  end

  result = Variables.new
  result.amethod
  result.anotherMethod

  puts localvar # =>hello
  puts $globalvar # =>bonjour

end

 其中 localvar是局部变量。$globalvar是全局变量。可参看注释

 

3:类和对象

定义和一般语言相同。下面我们定义一个对象

 

#flienmae dog.rb
#author lyy
#date 2012-11-03
#version 0.1
class Dog
  def set_name(aName)
    @myname = aName
  end

  def get_name
    return @myname
  end

  def talk
    return "woof!"
  end

  mydog = Dog.new
  mydog.set_name "Fido"
  puts mydog.get_name
  puts mydog.talk

  puts self # =>Dog
  puts self.class # =>Class
end

 其中,以@开头的变量是实例变量。相当于属性。

 

构造和初始化

查看下面代码:

 

#flienmae dog.rb
#author lyy
#date 2012-11-03
#version 0.1

#定义一个类
class Thing
  def set_name(aName)
    @name = aName
  end

  def get_name
    return @name
  end
end

#使用new实例化一个对象,类似java的调用默认为空的构造函数
thing1 = Thing.new
#设置名称
thing1.set_name("A lovely Thing")
#显示名称
puts thing1.get_name # =>    A lovely Thing
#定义一个类
class Treasure
  #初始化
  def initialize(aName, aDescription)
    @name = aName
    @description = aDescription
  end


end

#使用new实例化一个对象,类似java的调用带有字段名的构造函数
t1 = Treasure.new("Sword", "an Elvish weapon forged of gold")
t2 = Treasure.new("Ring", "a magic ring of great power")
puts t1.to_s # =>    #<Treasure:0xc42468>
puts t2.to_s # =>    #<Treasure:0xc42390>
# inspect方法 lets you look inside an object
puts "Inspecting 1st treasure: #{t1.inspect}" #<Treasure:0xc42468 @name="Sword", @description="an Elvish weapon forged of gold">

 说一下inspect方法,他是object对象的一个方法,返回一个易读的字符串,类似与java的定义对象后的new Dog().toString()。可以通过覆盖ruby的 to_s方法,返回可以让人理解的字符串或者其他

 

#覆蓋默認的to_s方法
   def to_s
    return "name: "+ @name + "description:" + @description
   end
 

ruby有垃圾回收机制。

 

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics