新手问题 [求助] Ruby 中的方法调用

匿名 · 2013年07月11日 · 最后由 yunzifeiyu 回复于 2013年07月11日 · 2072 次阅读

我在看 rubychina 源码的时候里面有这么一段: scope :suggest, -> { where(:suggested_at.ne => nil).desc(:suggested_at) }

查看 Rails 文档,scope 是这样定义的:

File activerecord/lib/active_record/scoping/named.rb, line 145

def scope(name, body, &block) ...... end

调用方法不是应该是方法名(参数)或者是方法名 { block }吗? 而像上述那样直接方法名:参数,-> { }是怎么回事?Ruby 的 Programming Ruby Guide 我也看了没有这种写法。还是有别的什么文档?

lamda 吧。

2 楼 已删除
匿名 #3 2013年07月11日

#1 楼 @chenge 多谢! In Ruby 1.9 there exists a new syntax for writing your lambda functions. How you would normally do these anonymous functions went something like this:

scope :enabled, lambda{ where(:enabled => true) }

Ruby 1.9 supports what is called 'stabby lambda' which looks like this:

scope :enabled, ->{ where(:enabled => true) }

->{}是 lambda,但是 scope :又是什么写法呢?

:suggest 是 symbol 参数,类似'suggest'。常识哦,一本书都没读吧。

匿名 #5 2013年07月11日

#4 楼 @chenge 呵呵,没看书!直接看程序了

#3 楼 @yunzifeiyu 一个方法接受两个参数 第一个是 Symbol 第二个是 lambda。。。没啥问题吧。。

匿名 #7 2013年07月11日

#6 楼 @iBachue 以前写 java,php 那种代码习惯了,突然转到 ruby 这种的非常不适应。以前 java 转 C#,php 都是直接看程序的,感觉没有想 ruby 这么困难

#7 楼 @yunzifeiyu 那是因为你的思维一直是面向过程编程 就算 java 很多初级 coder 也是把他当 c++ 的进化版来用的 所以最好看看 ruby 的书再看程序 否则你会被坑的很惨

#7 楼 @yunzifeiyu 那肯定 我刚开始也是这样的 Ruby 根本不是 C 系语言 转过来当然有难度 当然楼主要是转到函数式语言那大概更加困难了

匿名 #10 2013年07月11日

#8 楼 @zj0713001 恩,感觉有点头疼!有什么书推荐一下的?

#10 楼 @yunzifeiyu ProgrammingRuby Ruby 元编程 先看第一本打基础 再看后一本涨姿势~

匿名 #12 2013年07月11日

@chenge @iBachue @zj0713001 感谢各位指点,我还是踏踏实实看点基础书籍来学 ruby 吧

需要 登录 后方可回复, 如果你还没有账号请 注册新账号