Ruby 什么';lambda与proc或Struct与Class的区别是什么?

Ruby 什么';lambda与proc或Struct与Class的区别是什么?,ruby,Ruby,在Ruby中,我开始将结构看作“结构风格的类”,将lambdas看作“lambda风格的过程”。有没有更正确的术语来描述这些区别 为了说明我的意思: p = proc { |text| puts text } p.inspect #=> #<Proc:0x007fd9c135fd98@(irb):5> # vs l = lambda { puts 'foo' } l.inspect

在Ruby中,我开始将结构看作“结构风格的类”,将lambdas看作“lambda风格的过程”。有没有更正确的术语来描述这些区别

为了说明我的意思:

p = proc { |text| puts text }
p.inspect
                              #=> #<Proc:0x007fd9c135fd98@(irb):5>
# vs

l = lambda { puts 'foo' }
l.inspect                     #=> "#<Proc:0x007fbf33ad2830@(irb):7 (lambda)>"
p=proc{| text | put text}
p、 检查
#=> #
#vs
l=lambda{put'foo'}
l、 检查#=>“#”
……同样:

Point = Class.new
Point.class                #=> Class
p = Point.new
p.class                    #=> Point
p.inspect                  #=> #<Point:0x007fd9c1038ef8>

# vs

Point = Struct.new(:x, :y)
Point.class                #=> Class
p = Point.new
p.class                    #=> Point
p.inspect                  #=> "#<struct Point x=nil, y=nil>"
Point=Class.new
Point.class#=>class
p=新点
p、 类#=>点
p、 检查#=>#
#vs
点=结构新(:x,:y)
Point.class#=>class
p=新点
p、 类#=>点
p、 检查#=>“#”

没有“滑稽”的官方术语

关于lambdas有“严格的参数处理”和没有“技巧”的讨论!除了参数处理,一个重要的区别是
return
关键字的处理。例如,见


至于结构,很重要的一点是认识到:<代码> Stutt。新< /COD>不返回一个“代码>结构> <代码>的实例,而是一个新的<代码>类< /代码>,它继承自<代码>结构> <代码> .< /p> < p>区分类与结构或lambdas vs PROs的最佳方式是将它们视为具有不同刚性级别的相关数据结构。 在Ruby中,类和结构都是用于将数据绑定到代码的数据结构。结构以非常松散的方式执行此操作,相当于使用内部哈希来存储数据。一般来说,它们被认为比类更短暂,因为您会在其中放入更少的逻辑。该类允许您创建更具体的数据结构,以便在代码库的多个位置使用。在Ruby中创建结构确实会创建一个新的类对象(它在C中调用
rb\u class\u new

Ruby中procs和lambdas的区别在主题上是相似的。lambda是一个更严格的过程(具有参数检查和不同的返回行为)。它也不展开数组参数或使用
nil
代替缺少的参数

所有这些都相当于您希望在选择的数据结构中为您提供多少结构。如果您只希望对数据进行键/值访问,则散列可以做类可以做的事情。Ruby中另一个重要的考虑因素是如何组织代码库。在Ruby中,您通常可以做任何您想做的事情,因此您可以创建一个哈希,使用基于原型的方法声明,并通过代码重复克隆该哈希。这可能会让你的同事想伤害你。一般来说,类是选择的数据结构或任何重要的数据和逻辑绑定。如果参数很重要,或者您希望确保只从本地范围返回,则将选择lambda。

我建议使用“lambdacity”。)