#!/usr/bin/ruby
class Sample
def hello
puts "Hello Ruby!"
end
end
# 使用上面的类来创建对象
object = Sample. new
object.hello
注意:无参数的函数调用可以省略
初始化方法有一个统一的名字叫 initialize
class Customer
@@no_of_customers=0
def initialize(id, name, addr)
@cust_id=id
@cust_name=name
@cust_addr=addr
end
end
ruby支持5种类型
一般小写字母、下划线开头:变量(Variable)。
$开头:全局变量(Global variable)。
@开头:实例变量(Instance variable)。
@@开头:类变量(Class variable)类变量被共享在整个继承链中
大写字母开头:常数(Constant)。
变量在打印的时候不能省略 大括号,别的类型变量都可以省略大括号,比如
你这样打印变量是打不出东西的
错误的写法
a=1
b=2
puts "a: #a"
puts "b: #b"
打印结果
a: #a
b: #b
正确的写法
a=1
b=2
puts "a: #{a}"
puts "b: #{b}"
打印结果
a: 1
b: 2
变量的生存周期只在方法中,出了方法就没了,所以也只能定义在方法里面,比如
错误的写法
class Test2
a=1
b=2
def printVar
puts "a: #{a}"
puts "b: #{b}"
end
end
hellotest = Test2.new
hellotest.printVar
输出
test.rb:5:in `printVar': undefined local variable or method `a' for #<Test2:0x00000002cf2248> (NameError)
from test.rb:10:in `<main>'
正确的写法
class Test2
def printVar(a,b)
puts "a: #{a}"
puts "b: #{b}"
end
end
hellotest = Test2.new
hellotest.printVar(1,2)
简单类型是值拷贝(字符串也是简单对象,这点跟java不一样)
class Test2
def testPass(a,b)
puts "before add : a: #{a} b: #{b}"
addVar(a,b)
puts "after add : a: #{a} b: #{b}"
end
def addVar(a,b)
a += 1
b += 2
end
end
hellotest = Test2.new
hellotest.testPass(1,2)
输出
before add : a: 1 b: 2
after add : a: 1 b: 2
复杂对象是对象引用
class Obj1
def initialize(a)
@a=a
end
def printVal
puts "a: #@a"
end
def setA(a)
@a=a
end
def getA
return @a
end
end
class Test2
def testPass
testobj = Obj1.new("hello")
a = testobj.getA
puts "before add : a: #{a}"
addVar(testobj)
a = testobj.getA
puts "after add : a: #{a}"
end
def addVar(obj)
obj.setA(obj.getA + " world")
end
end
hellotest = Test2.new
hellotest.testPass
输出
before add : a: hello
after add : a: hello world
实例变量的打印是可以省略大括号的,比如 #@a 跟 #{@a} 是一回事
实例变量只能在 initialize 里面被定义。如果想像在java中这样定义是错误的
class LearnInstanceVar
@a=1
def printVar
puts "a: #{@a}"
end
end
test1 = LearnInstanceVar.new
test1.printVar
输出
$ ruby test.rb
a:
正确的定义
class LearnInstanceVar
def initialize(a)
@a=a
end
def printVar
puts "a: #{@a}"
end
end
test1 = LearnInstanceVar.new("hello")
test1.printVar
输出
$ ruby test.rb
a: hello
类似java中的private,但是更严格,连定义的位置都只能放在特定的方法里面
未完待续~
长按指纹即可关注哦!每天都会为你推荐有趣有用的资料!喜欢就分享给更多人吧!