2014-01-26 51 views
1

下面的Ruby函数定义让我有点困惑。我是在声明对象的函数还是属性?Rails的功能或属性

def project_params 
    params.require(:project).permit(:name) 
end 

如果我声明了一个函数,如何project_params知道return结果呢?我习惯于被评估的内容,但这里看起来像Rails返回结果。

回答

1

红宝石没有属性。对象只有(外部)方法,Ruby中的所有方法都会返回最后一条语句的值,除非明确指定return

Ruby确实有实例变量,例如@foo@bar,但是这些只能在内部访问。它们只是变量,其范围设置为实例。类变量,例如:@@foobar的范围是该类。

Ruby Programming Wikibook中有关于Ruby方法的一些很好的信息。

快乐编码!

3

Ruby会自动返回方法中上次执行的表达式的结果。

+0

非常有趣...所以这是一个函数,而不是它看起来的对象属性。从文档看来,Ruby看起来没有单独声明的“对象属性”,它只是有实例变量。 http://www.tutorialspoint.com/ruby/ruby_object_oriented.htm 这是否意味着你不能拥有一个对象的静态属性? –

+1

是的,这是一个功能。虽然,正确的红宝石术语将是一种“方法”。我不认为“财产”一词在红宝石中使用过。有几个概念可以被称为“一个属性”:读者,作家,实例变量......我不知道你来自哪种语言,但可能会产生一些亮点:http:// www.sitepoint.com/properties-and-methods-in-ruby-from-a-net-pov/ – bassneck

+0

你当然可以。 “静态”属性只是一个对象类的实例变量。但要访问它,你需要创建一个阅读器方法。这不是评论的主题。也许你应该阅读一本关于ruby/rails的书。迈克尔哈特尔斯的铁轨教程是首先想到的:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book – bassneck