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有垃圾回收机制。