2011-10-29 203 views
2

我对Ruby很新,所以请耐心等待。如何正确使用块?

为什么它是一个语法错误有“测试”{| s |打印s}?如何“测试”做| s |打印结束?

谢谢

+0

为了将来的参考,通常包含给出的错误信息是一个好主意。 –

回答

6

你不能这样说:

"test" { |s| print s } 

因为"test"是一个字符串,而不是一个方法。这同样适用于您的do/end版本。你可以说:

["test"].each { |s| print s } 

虽然因为数组是可枚举和可数有each方法。

+0

男人,似乎我误读:) +1为你;) – apneadiving

3

{}通常用于一个衬里。

do/end for multiple lines。

但没有规则,做你喜欢的。

注意:

要是你需要传递的一个衬垫几个指令,他们有独立的;

+0

保留我的答案,对初学者仍然有用。 – apneadiving

0

块只是大括号或关键字do/end中包含的一段代码。如前所述,您通常对一个衬垫使用大括号,并对多行代码执行/结束。块只能在调用某个方法后立即出现。您可以将块视为匿名方法(没有方法名的方法)。

在你的代码中,你是在一个字符串之后立即放置一个块,而不是方法调用。块可用于循环,因为这样的:

2.times { puts "hello" } # => 2 
# >> hello 
# >> hello 

在上面的代码中,时间是属于所有整数(即,它是整数类的实例方法)的方法。 times方法执行块中的代码两次,并返回您调用它的对象(本例中为2)。您可以将块传递给任何方法,但不期望它们的方法将忽略该块。

块可以带参数。参数放置在管道('|'字符)之间。事实证明,第一个例子中可以接受的参数如下所示:

2.times { |i| puts i.to_s + " hello" } # => 2 
# >> 0 hello 
# >> 1 hello 

我只是刚刚触及块的电源的表面。您可以在线版Programming Ruby: The Pragmatic Programmer's Guide(aka PickAx Book)免费阅读更多关于积木的信息。这是一个现在的几个版本,但对于Ruby的介绍,你应该发现它已经足够了。一旦你理解了块,你可以开始使用包含在数组和哈希中的Enumerable的强大功能。