我(非常)对红宝石很新。我发现了一种调用函数的有趣方法,但我无法弄清楚它是如何工作的。
def foo (arg1)
puts arg1
end
foo "bar" do
"hello"
puts "world"
thisStuff
end
有人可以向我解释这里发生了什么吗?没有名为“thisStuff”的函数,但代码编译没有问题,控制台结果为“bar”。
答案 0 :(得分:3)
Ruby块是您放在do
- end
个关键字的代码!
Blocks有 yield 关键字来执行某些代码。看看这个(来源:http://mixandgo.com/blog/mastering-ruby-blocks-in-less-than-5-minutes):
在您的情况下,您的块foo
没有yield
,因此在调用时它只执行了块中的部分。尝试添加 yield ,您将按预期得到例外。
查看以上链接以进一步探索块,因为它们是Ruby强大的工具之一。
答案 1 :(得分:2)
do
... end
是一个块,本质上是一个匿名函数,传递给foo
。它可以使用foo
在yield
函数内执行,但永远不会调用yield
,因此块永远不会执行。
您可能还会看到使用{}
语法声明的这些块,这与do
... end
相同。它们主要用于函数编程函数,如map
或select
。