Ruby函数调用:foo“bar”做

时间:2016-08-10 08:55:09

标签: ruby

我(非常)对红宝石很新。我发现了一种调用函数的有趣方法,但我无法弄清楚它是如何工作的。

def foo (arg1)
  puts arg1
end

foo "bar" do
  "hello"
  puts "world"
  thisStuff
end

有人可以向我解释这里发生了什么吗?没有名为“thisStuff”的函数,但代码编译没有问题,控制台结果为“bar”。

2 个答案:

答案 0 :(得分:3)

Ruby块是您放在do - end个关键字的代码!

Blocks有 yield 关键字来执行某些代码。看看这个(来源:http://mixandgo.com/blog/mastering-ruby-blocks-in-less-than-5-minutes):

enter image description here

在您的情况下,您的块foo没有yield,因此在调用时它只执行了块中的部分。尝试添加 yield ,您将按预期得到例外。

查看以上链接以进一步探索块,因为它们是Ruby强大的工具之一。

答案 1 :(得分:2)

do ... end是一个,本质上是一个匿名函数,传递给foo。它可以使用fooyield函数内执行,但永远不会调用yield,因此块永远不会执行。

您可能还会看到使用{}语法声明的这些块,这与do ... end相同。它们主要用于函数编程函数,如mapselect