Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在Ruby web应用程序中使用Proc或Lambda的例子是什么?_Ruby_Web Applications - Fatal编程技术网

什么';在Ruby web应用程序中使用Proc或Lambda的例子是什么?

什么';在Ruby web应用程序中使用Proc或Lambda的例子是什么?,ruby,web-applications,Ruby,Web Applications,我很难想象Procs和Lambdas在web应用程序中的实际用途。是否有人在您的代码中有这样一种情况的例子,它们可以派上用场?我在命名范围中使用它们: 命名为_scope:last,lambda{| quantity{:order=>“created_at DESC”,:limit=>quantity} 创建一个简单的方法来获取最后的帖子、评论等 现在,我有点作弊了,这是一个框架,而不是一个“web应用”,但我不认为web应用与其他桌面应用有那么大的不同。Procs和Lambdas都允许您“保存

我很难想象Procs和Lambdas在web应用程序中的实际用途。是否有人在您的代码中有这样一种情况的例子,它们可以派上用场?

我在命名范围中使用它们:

命名为_scope:last,lambda{| quantity{:order=>“created_at DESC”,:limit=>quantity}

创建一个简单的方法来获取最后的帖子、评论等


现在,我有点作弊了,这是一个框架,而不是一个“web应用”,但我不认为web应用与其他桌面应用有那么大的不同。Procs和Lambdas都允许您“保存”代码以供以后使用,并且可以帮助您使用行为、使用更多“面向域”的方法和清理更多“常规代码”

我在命名范围上使用它们:

命名为_scope:last,lambda{| quantity{:order=>“created_at DESC”,:limit=>quantity}

创建一个简单的方法来获取最后的帖子、评论等


现在,我有点作弊了,这是一个框架,而不是一个“web应用”,但我不认为web应用与其他桌面应用有那么大的不同。Procs和Lambdas都允许您“保存”代码以备将来使用,并且可以帮助您使用行为、使用更多“面向域”的方法以及清理更多“常规代码”

为什么特别是在webapps中?你是说RubyonRails框架吗

当您希望匿名存储代码片段时,Procs和lambda非常有用。Procs和lambdas与方法非常相似,只是它们没有名称。在ActiveRecord/Rails中有一个很好的例子来说明这一点:

// methods are named
validates_presence_of :foo, :if => :active?

// procs aren't
validates_presence_of :foo, :if => proc {|r| do_stuff }
一般来说,proc用于回调和钩子,这样您就不必编写命名方法并引用它们,直接将有问题的代码放在选项哈希中等等


你可能会发现这很有用。

为什么特别是在Web应用程序中?你是说RubyonRails框架吗

当您希望匿名存储代码片段时,Procs和lambda非常有用。Procs和lambdas与方法非常相似,只是它们没有名称。在ActiveRecord/Rails中有一个很好的例子来说明这一点:

// methods are named
validates_presence_of :foo, :if => :active?

// procs aren't
validates_presence_of :foo, :if => proc {|r| do_stuff }
一般来说,proc用于回调和钩子,这样您就不必编写命名方法并引用它们,直接将有问题的代码放在选项哈希中等等


您可能会发现这很有用。

使用lambda或proc是一种称为函数式编程的编程风格。Rails中有几个接口,您可能希望在其中传递块对象(lambda或procc),如下所示:

class-PersonProc.new{{用户{用户.signup_步骤>2}
结束
您可以设计一些这样的接口,用户可以选择传递方法名(符号)或proc(或lambda)对象来指定某些逻辑

例如,Rails中的另一个地方是可以动态设置:

class WeblogController < ActionController::Base
  layout proc{ |controller| current_user.logged_in? ? "writer_layout" : "reader_layout" }
end
class-WeblogController
使用lambda或proc是一种称为函数式编程的编程风格。Rails中有几个接口,您可能希望在其中传递块对象(lambda或procc),如下所示:

class-PersonProc.new{user | user.signup\u step>2}
结束
您可以设计一些这样的接口,用户可以选择传递方法名(符号)或proc(或lambda)对象来指定某些逻辑

例如,Rails中的另一个地方是可以动态设置:

class WeblogController < ActionController::Base
  layout proc{ |controller| current_user.logged_in? ? "writer_layout" : "reader_layout" }
end
class-WeblogController
显然,procs和lambda是与回调相关的任何东西的必要组件,但在大多数情况下,在ruby中,这可以通过一个块来完成

proc或lambda有用的一个地方与回调无关,比如编译正则表达式。当然,regex是语言的一部分,因此您不需要proc来实现这一点,但您可能会发现自己编写的其他类型的过程具有一次性成本,可以重用,但不值得创建一个完整的类

在我的例子中,我有一个包含字符串列表的对象(publist)。在代码的一个方面,我需要反复检查其他集合中是否有该列表中的成员。如果更改数据类型使对象包含一个集合,则会很不方便,而且性能也很差。因此,我所做的是创建一个方法,该方法返回一个匹配器lambda,该匹配器lambda具有此列表的本地集表示形式


我本可以返回一个集合,但业务逻辑是一个项是否在逻辑上匹配属于publist。我可以在将来将其更改为支持子字符串或正则表达式,matcher的用户仍将使用相同的api。

显然,procs和lambda是与回调相关的任何内容的必要组件,但在大多数情况下,在ruby中,这可以通过一个块来完成

proc或lambda有用的一个地方与回调无关,比如编译正则表达式。当然,regex是语言的一部分,因此您不需要proc来实现这一点,但您可能会发现自己编写的其他类型的过程具有一次性成本,可以重用,但不值得创建一个完整的类

在我的例子中,我有一个包含字符串列表的对象(publist)。在代码的一个方面,我需要反复检查其他集合中是否有该列表中的成员。如果更改数据类型使对象包含一个集合,则会很不方便,而且性能也很差。所以我所做的是创建一个返回matc的方法