1 | 2 | 3 | 4

20 分钟学会 Ruby

如果我们想说很多次“Hello”而不让手指感到疲劳怎么办?我们需要定义一个方法!

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 提及它的名字一样简单。如果该方法不接受参数,那么这就是您所需要的。您可以添加空括号(如果需要),但不是必须的。

如果我们想向一个人说 hello,而不是向全世界说 hello 怎么办?只需重新定义 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_hisay_bye 使用。

那么我们如何让这个 Greeter 类开始工作呢?创建一个对象。