现在的位置: 首页 > 综合 > 正文

20分钟学会Ruby(3/4)

2013年07月04日 ⁄ 综合 ⁄ 共 1983字 ⁄ 字号 评论关闭

 现在我们创建一个Greeter对象来来调用它

当对象g被创建后,它就记下name的值为Pat,嗯……,如果我们想直接取得name呢

irb显示错误信息,所以我们不能这样做!

对象内部

      实例变量隐藏在对象内部,但他们隐藏得不是十分隐蔽,你可以随时看到它们当你检查对象的时候,有几个方法去访问它们。Ruby提供了很好的对象导向去接近它们并保持着数据隐藏在远处。

     那么有那些方法存在对象Greeter中?

喔~,这里有好多方法,但我们只定义了两个方法,这里是怎么回事呢?这是对象Greeter的全部方法,一个完整的列表,包含了父类定义的一些方法。如果要列出定义在Greeter中的且不包含父类的方法,那就使用参数false:

嗯,这就对了,那我们看看对象g对哪些方法有响应

更改类

      但如果你想要查看name的值的变化呢?Ruby提供了一个简单的方法访问对象的变量:

     在Ruby中,你可以打开一个类修改它,并不是修改任何已经存在的对象,只是影响你新创建的任何对象。我们试试创建一个新对象,看看它的@name属性:

使用attr_accessor定义两个新方法:name用来获取值,name=用来赋值。

问候世间万物,无敌百万Greeter!

   这个Greeter并不是如标题那样有趣,它一次只能处理一个人。如果我们有一种可以问候世界、某人、一个列表中的人的Greeter呢?让我们在一个文件中写一个这样的Greeter.退出IRB可以输入"quit" "exit"或者按ctrl+D。

#!/usr/bin/env ruby

class MegaGreeter
  attr_accessor 
:names

  
# Create the object
  def initialize(names = "World")
    @names 
= names
  
end

  
# Say hi to everybody
  def say_hi
    
if @names.nil?
      puts 
"..."
    elsif @names
.respond_to?("each")

      
# @names is a list of some kind, iterate!
      @names.each do |name|
        puts 
"Hello #{name}!"
      
end
    
else
    puts 
"Hello #{@names}!"
    
end
  
end

  
# Say bye to everybody
  def say_bye
    
if @names.nil?
      puts 
"..."
    elsif @names
.respond_to?("join")
      
# Join the list elements with commas
      puts "Goodbye #{@names.join(", ")}.  Come back soon!"
    
else
      puts 
"Goodbye #{@names}.  Come back soon!"
    
end
  
end

end

if __FILE__ == $0
  mg 
= MegaGreeter.new
  mg
.say_hi
  mg
.say_bye

  
# Change name to be "Zeke"
  mg.names = "Zeke"
  mg
.say_hi
  mg
.say_bye

  
# Change the name to an array of names
  mg.names = ["Albert", "Brenda", "Charles",
    
"Dave", "Englebert"]
  mg
.say_hi
  mg
.say_bye

  
# Change to nil
  mg.names = nil
  mg
.say_hi
  mg
.say_bye
end

(文中代码颜色加亮不正确是因为没有插入Ruby语言的选项,所以使用PHP代替)

文件另存为ruby20min.rb,在CMD中进入ruby20min.rb所在位置,输入ruby ruby20min.rb

输出的结果应该是

Hello World!
Goodbye World
.  Come back soon!
Hello Zeke
!
Goodbye Zeke
.  Come back soon!
Hello Albert
!
Hello Brenda
!
Hello Charles
!
Hello Dave
!
Hello Englebert
!
Goodbye Albert
, Brenda, Charles, Dave, Englebert.  Come
back soon
!
...
...

接下来,请看第四部分

抱歉!评论已关闭.