新手问题 发现 rails4 或者 ruby2.0 里的一个新的 mark

hlxwell · 2013年03月01日 · 最后由 luikore 回复于 2013年03月02日 · 2599 次阅读

scope :sorted, -> { order(:name) }

看上感觉好像是 coffeescript 里的方法定义

method = (xx) ->
  xxxxxx

有人知道吗给个 reference

google 对这个特殊字符搜索没反应

-> ?现在“必须”用这种 lambda 来定义 scope 了,因为之前的这种方式有问题:

scope :sorted, where(xxx)

不使用 lambda 或 Proc 而使用上面这种方式的话,条件是在代码加载的时候就求出来的。很多 bug 是由这个问题引起的。

#1 楼 @fleuria thanks, 以前挺少见的这个语法。 #2 楼 @ashchan 好主意,以前也没有看到通过使用 -> 语法去解决这个问题。都是说要用 block。

#2 楼 @ashchan 说的很对,比如

scope :expired, where("created_at >= ?", DateTime.now - 1.hours )

#4 楼 @server 这个早就有了啊,scope 支持 lambda 的

#5 楼 @fsword 呵呵,我是举个例子,因为我曾经遇到这种 bug

@hlxwell

class Proc
  def -@ 
    self
  end
end

------------------> { `o_o` }

学习了 原来是这个东西 有空好好看看

@luikore そうですね 是不是所有的标点符号都能用来定义成方法啊。

#11 楼 @hlxwell 前缀运算符只有 +, -, ~

鱼骨运算符 >-+->, 飞碟运算符 <-+->, 射箭运算符 >>-->:

class Proc
  def -@; self; end
  def +@; self; end
end

Cat = Struct.new :fish
class Cat
  def > p; self.fish += p[]; end
  def < p; self.fish -= p[]; end
  def >> p; self.fish = p[]; end
end

Cat[1]  >-+->  {0_0}
Cat[1]  <-+->  {0_0}
Cat[1]  >>-->  {0_0}
需要 登录 后方可回复, 如果你还没有账号请 注册新账号