论坛首页 海阔天空论坛

[Ruby 1.9] 超箭头运算符

浏览 2708 次
精华帖 (16) :: 良好帖 (0) :: 灌水帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-28   最后修改:2009-04-28
首先你需要 Ruby 1.9 ,然后
class Proc; def -@; self; end; end


试一下:
p = ------------------> x{x + 1}
p[1]


have fun.


---------------------------->
-------------------------------------------------------------------------------------->
------------------------------------------------->
<------------------------------------------------------------------------------------------------------



有个更舒服的做法:
gem install superators

Jay Phillips 写道

require 'superators'
class Array
  superator "<-----------------" do |operand|
    self << operand.reverse
  end
end
[1,2,3] <----------------- [1,2,3]
#=> [1,2,3,3,2,1]



注意,和上面不同,多一个减号或者少一个都不成立哦。

Jay Phillips 是 Rails 后另一个杀手级应用 Adhearson 的作者。
   发表时间:2009-04-28  
返回self太无趣了……要是带curry还能有趣点
irb(main):001:0> class Proc; def -@; if self.arity > 1 then -> x {self.curry[x]} else self; end; end; end
=> nil
irb(main):002:0> a = -----> x,y { x + y }
=> #<Proc:0x1a54a8c@(irb):1 (lambda)>
irb(main):003:0> a[2][3]
=> 5
irb(main):004:0> a[2,3]
ArgumentError: wrong number of arguments (2 for 1)
        from (irb):4:in `[]'
        from (irb):4
        from E:/build_area/ruby191/bin/irb.bat:20:in `<main>'
0 请登录后投票
   发表时间:2009-04-28  
原来有 curry 这个函数…… 赶紧记下来~~
0 请登录后投票
   发表时间:2009-04-28  
RednaxelaFX 写道
返回self太无趣了……要是带curry还能有趣点
irb(main):001:0> class Proc; def -@; if self.arity > 1 then -> x {self.curry[x]} else self; end; end; end
=> nil
irb(main):002:0> a = -----> x,y { x + y }
=> #<Proc:0x1a54a8c@(irb):1 (lambda)>
irb(main):003:0> a[2][3]
=> 5
irb(main):004:0> a[2,3]
ArgumentError: wrong number of arguments (2 for 1)
        from (irb):4:in `[]'
        from (irb):4
        from E:/build_area/ruby191/bin/irb.bat:20:in `<main>'


self.curry 就可以了,已经包含 arity 的判断
0 请登录后投票
   发表时间:2009-04-28  
night_stalker 写道
self.curry 就可以了,已经包含 arity 的判断

要玩嘛不是么 =v=
Proc#curry之后参数列表就变成可变长度的了,arity就会变成-1。如果有办法不用Proc#curry的话会更舒服……
0 请登录后投票
   发表时间:2009-04-28  
RednaxelaFX 写道
night_stalker 写道
self.curry 就可以了,已经包含 arity 的判断

要玩嘛不是么 =v=
Proc#curry之后参数列表就变成可变长度的了,arity就会变成-1。如果有办法不用Proc#curry的话会更舒服……


加个减号就 curry ,我已经很满足了……
0 请登录后投票
   发表时间:2009-04-30   最后修改:2009-04-30
deleted
0 请登录后投票
论坛首页 海阔天空版

跳转论坛:
Global site tag (gtag.js) - Google Analytics