二十分钟学会 Ruby
如果我们想多次说“你好”,但又不想让手指累着,该怎么办?我们需要定义一个方法!
irb(main):010:0> def hi
irb(main):011:1> puts "Hello World!"
irb(main):012:1> end
=> :hi代码 def hi 开始定义方法。它告诉 Ruby 我们正在定义一个方法,它的名字是 hi。下一行是方法体,和我们之前看到的一样: puts "Hello World"。最后,最后一行 end 告诉 Ruby 方法定义完毕。Ruby 的响应 => :hi 告诉我们它知道方法定义已经完成。对于 Ruby 2.0 及更早版本,此响应可能是 => nil。但这在这里并不重要,让我们继续。
方法的短暂而重复的生命
现在让我们尝试运行这个方法几次
irb(main):013:0> hi
Hello World!
=> nil
irb(main):014:0> hi()
Hello World!
=> nil好吧,这很容易。在 Ruby 中调用方法就像只是向 Ruby 提及它的名字一样简单。如果方法不接受参数,那么就只有这些了。如果您愿意,可以添加空括号,但它们并非必需。
如果我们想对某个人说你好,而不是对全世界说,该怎么办?只需将 hi 重定义为接受一个名字作为参数。
irb(main):015:0> def hi(name)
irb(main):016:1> puts "Hello #{name}!"
irb(main):017:1> end
=> :hi
irb(main):018:0> hi("Matz")
Hello Matz!
=> nil所以它奏效了……但让我们花点时间看看这里发生了什么。
字符串中的占位符
那个 #{name} 是什么意思?这是 Ruby 将某些内容插入字符串的方式。花括号之间的部分会被转换为字符串(如果它还不是字符串),然后在此处替换到外部字符串中。您也可以使用此功能来确保某人的名字被正确大写。
irb(main):019:0> def hi(name = "World")
irb(main):020:1> puts "Hello #{name.capitalize}!"
irb(main):021:1> end
=> :hi
irb(main):022:0> hi "chris"
Hello Chris!
=> nil
irb(main):023:0> hi
Hello World!
=> nil这里还有其他几个技巧需要注意。一个是我们再次在没有括号的情况下调用方法。如果正在做的事情很明显,括号就是可选的。另一个技巧是默认参数 World。这表示“如果未提供姓名,则使用默认姓名 "World"”。
演变成一个问候者
如果我们想要一个真正的问候者,一个记住你的名字并欢迎你,并始终以尊重对待你的问候者,该怎么办?你可能想为此使用一个对象。让我们创建一个“Greeter”类。
irb(main):024:0> class Greeter
irb(main):025:1> def initialize(name = "World")
irb(main):026:2> @name = name
irb(main):027:2> end
irb(main):028:1> def say_hi
irb(main):029:2> puts "Hi #{@name}!"
irb(main):030:2> end
irb(main):031:1> def say_bye
irb(main):032:2> puts "Bye #{@name}, come back soon."
irb(main):033:2> end
irb(main):034:1> end
=> :say_bye这里新出现的关键字是 class。这定义了一个名为 Greeter 的新类以及该类的一系列方法。还要注意 @name。这是一个实例变量,可供该类的所有方法访问。正如您所见,它被 say_hi 和 say_bye 使用。
那么我们如何让这个 Greeter 类启动呢? 创建对象。