2013-02-28 60 views
2

例如绝对标志在Ruby中意味着什么?

func(@param) do |f| 
    some code here 
end 

@param.each do |sth| 
    some code here 
end 

什么是绝对值符号在这里做?我不明白这两段代码。

+1

这只是引入块参数的语法(类似于括号在适当位置引入方法参数的方式)。搜索“红宝石块教程”。 – 2013-02-28 01:11:54

+0

我不明白这个问题是如何过于本地化的,当它与其他所有的“Ruby中的......意味着什么”问题一样的时候。 – DGM 2013-03-02 04:35:59

回答

4

这是块中的局部变量,让线路:

@param.each do |sth| 

你遍历@param权,以及在@param每个项目被称为单独为sth

所以如果@param是指含有一个阵列的数字

[1,3,5,4] 

在第一次迭代sth1,然后3,然后5,然后4

也是一样的:

func(@param) do |f| 

除了现在局部变量称为f!你可以称它为任何你想要的,甚至|ihavenoideawhatimdoing|

+0

如果基金的返回值(@param)不是一组值而只是一个单值?它仍然有效吗? – OneZero 2013-02-28 01:17:06

+0

是的,它只会迭代一次变量。对于n个值的列表,它将迭代n次,其中每个值为' – siame 2013-02-28 01:17:45

2

这是一个局部变量,它表示对于do ... end之间的代码块,定义了变量f

+0

那它怎么知道f和是什么?我还没有给他们分配任何价值。 – OneZero 2013-02-28 01:09:35

+0

@ user1229490您正在调用的方法为您提供了该值,您只是给它一个名称。在Ruby中称为块 – 2013-02-28 01:11:41

+0

因此,前一个函数的返回值分配给| f |。是对的吗? – OneZero 2013-02-28 01:14:28

0

它表示实例变量。你经常看到它,如果人们使用attr_互换*方法,如attr_accessor,这使得@someattrself.some_attr相当于实例方法。

+1

它不表示实例变量,并且与'attr *':'@ isAnInstanceVariable'无关。 – 2013-02-28 01:13:54

2

它是一个块的参数。该块是do和end之间的代码的一部分。该代码块可以使用fsth,在您的示例中该代码块可能已由funceach设置。

A tutorial on Ruby blocks可能会有所帮助。

Labmda calculus - 更抽象,但它是我第一次看到这些东西的上下文。

+0

我不会引入lambda微积分..但是,这个答案确实说明了它是什么(或者说,它引入了什么)..还有更好的可用块的教程。 – 2013-02-28 01:17:37

+0

是的,lambda微积分超过了顶端,而不是一个很好的比较,因为与lambda表达式不同,块可以有多个参数。更好的条款将是匿名函数或一流的函数。 – windywindy 2013-02-28 01:26:18