Tag: lambda

Rails:既给出了块arg又给出了实际块

我想在Rails 4中创建一个应用程序。 我在我的个人资料显示页面中有这个代码,以显示用户创建的所有项目。 “…”, :length => 250) %> 当我尝试这个时,我得到一个错误,上面写着: SyntaxError at /profiles/3 both block arg and actual block given 任何人都可以看到什么是错的? 方法’all_current_for_creator’在我的project.rb中定义为: def self.all_current_for_creator(creator) if creator.profile.present? creator.current.visible else guest_visible end end 我在project.rb中定义了三个范围: scope :creator, lambda { where(@creator_profile = user.profile_id)} scope :current, lambda { where(‘project.start_date >= ?’, Date.today)} scope :visible, lambda { joins(:sweep => :disclosure).where(‘disclosures.allusers’ => ‘true’) […]

Ruby中lambda和 – >运算符的区别

以下两个范围生成相同的结果,哪种语法更可取,还有其他区别吗? scope :paid, lambda { |state| where(state: state) } scope :paid, ->(state) { where(state: state) }

在Ruby中,你可以使用lambda或proc调用方法来调用迭代器吗?

我想创建一个迭代器,我可以传递给方法来调用。 #!/usr/bin/env ruby puts “————————————” puts “1 This works.” puts “————————————” 1.times {|who| puts “Position #{who} works!”} puts “————————————” puts “2 This works.” puts “————————————” aBlock = Proc.new { |who| puts “Position #{who} also works!” } 2.times &aBlock puts “————————————” puts “3 This works.” puts “————————————” def eachIndex 3.times { |i| yield i } end […]

如何更改lambda的上下文?

如果您运行以下代码,则会出现错误。 class C def self.filter_clause param_1 puts param_1 yield # context of this param is class B end def hi “hello” end end class B def self.filter(value, lambda) code = lambda { filter_clause(value, &lambda) } C.instance_exec(&code) end filter(:name, ->{ hi }) end 错误是 NameError: undefined local variable or method `hi’ for B:Class from (pry):17:in `block […]

在Ruby中传递的块中引用调用对象

有没有办法在被调用的块中获取被调用的对象。 例如,是否有任何方法可以让块访问方法batman或类SuperHeros class SuperHeros attr_accessor :news def initialize @news = [] end def batman task puts “Batman: #{task} – done” yield “feed cat” @news << task end end cat_woman = lambda do |task| puts "Cat Woman: #{task} – done" # invoker.news << task end robin = lambda do |task| puts "Robin: #{task} – done" # […]

理解在Ruby中使用lambda注入的行为

我经常将预配置的lambdas插入可枚举的方法,如’map’,’select’等,但’inject’的行为似乎有所不同。 例如 mult4 = lambda {|item| item * 4 } 然后 (5..10).map &mult4 给我 [20, 24, 28, 32, 36, 40] 但是,如果我使用2参数lambda与这样的注入一起使用, multL = lambda {|product, n| product * n } 我希望能说 (5..10).inject(2) &multL 因为’inject’有一个可选的单个参数作为初始值,但这给了我… irb(main):027:0> (5..10).inject(2) &multL LocalJumpError: no block given from (irb):27:in `inject’ from (irb):27 但是,如果我将’&multL’填充到第二个参数中以进行注入,那么它可以工作。 irb(main):028:0> (5..10).inject(2, &multL) => 302400 我的问题是“为什么这样做而不是之前的尝试?”

我如何使用PHP 5.3 Closures,比如我们在Ruby中使用Blocks

我如何使用PHP 5.3 Closures,比如我们在Ruby中使用Blocks。 我从来没有在Ruby中使用’for’循环,因为使用带有’each”read_all”inject’方法的块。 我怎样才能使用像Ruby块这样的PHP 5.3闭包,并说再见’for’Loops 🙂 就像在{和}之间是一个闭包(或块或匿名函数) fruit = %w[apple banana orange] fruit.each { |f| print “#{f}, ” } 我用PHP这样做, $fruit = array(‘apple’, ‘banana’, ‘orange’); foreach ($fruit as $f) { print “$f, “; } 有没有办法使用PHP闭包的Ruby方式来实现这一点,因为PHP 5.3支持它。

如果没有圆括号前面的点,为什么Ruby 1.9 lambda调用不可能?

我查看了最新的Ruby版本,以便了解最新的更改。 我尝试做的第一件事是调用Ruby lambda / block / proc就像你使用Python可调用一样。 a = lambda {|x| puts x} a.call(4) # works, and prints 4 a[4] # works and prints 4 a.(4) # same a(4) # undefined method ‘a’ for main:Object 为什么不能进行最后一次通话? 会不会是?

何时何地使用Lambda?

我试图理解为什么我们真的需要rubda(或任何其他语言)lambda或proc? #method def add a,b c = a+b end #using proc def add_proc a,b f = Proc.new {|x,y| x + y } f.call a,b end #using lambda function def add_lambda a,b f = lambda {|x,y| x + y} f.call a,b end puts add 1,1 puts add_proc 1,2 puts add_lambda 1,3 我可以使用以下方法进行简单的添加:1。正常函数def,2。使用proc和3.使用lambda。 但是为什么以及在现实世界中使用lambda? 任何不能使用函数和lambda应该使用的例子。

Hash.each和lambdas之间的arity不一致

我从Josh Susser那里得到了以下例子 def strip_accents params thunk = lambda do |key,value| case value when String then value.remove_accents! when Hash then value.each(&thunk) end end params.each(&thunk) end 当我把它放在rails控制台(irb)中,并用哈希调用它时,我得到以下内容: ruby-1.9.2-p136 :044 > `ruby –version` => “ruby 1.9.2p136 (2010-12-25 revision 30365) [i686-linux]\n” ruby-1.9.2-p136 :045 > strip_accents({:packs=>{:qty=>1}}) ArgumentError: wrong number of arguments (1 for 2) from (irb):32:in `block in strip_accents’ from […]