在Ruby 1.8中,proc/lambda与另一方面之间存在细微差别Proc.new.
可能重复:
Ruby中的proc和lambda有什么区别?
运行此Ruby代码时:
def func_one
proc_new = Proc.new {return "123"}
proc_new.call
return "456"
end
def func_two
lambda_new = lambda {return "123"}
lambda_new.call
return "456"
end
puts "The result of running func_one is " + func_one
puts ""
puts "The result of running func_two is " + func_two
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
The result of running func_one is 123
The result of running func_two is 456
Run Code Online (Sandbox Code Playgroud)
至于func_two,第一个 的价值在哪里return,也就是说,123?
谢谢.
我已经尝试过关于procs和lambda的阅读,但我必须继续重读这个定义.
有人能以一种清晰而难忘的方式向我解释吗?
我有以下课程:
class User
code1 = Proc.new { }
code2 = lambda { }
define_method :test do
self.class.instance_eval &code1
self.class.instance_eval &code2
end
end
User.new.test
Run Code Online (Sandbox Code Playgroud)
为什么第二个instance_eval失败并出现wrong number of arguments (1 for 0)错误?
我知道Ruby中的方法不是对象,而是procs和lambdas.除此之外,他们之间有什么区别吗?因为我们都可以传球.是什么让proc对象与方法不同?
方法:
1.8.7-p334 :017 > def a_method(a,b)
1.8.7-p334 :018?> puts "a method with args: #{a}, #{b}"
1.8.7-p334 :019?> end
1.8.7-p334 :021 > meth_ref = Object.method("a_method")
=> #<Method: Class(Object)#a_method>
1.8.7-p334 :022 > meth_ref.call(2,3)
Run Code Online (Sandbox Code Playgroud)
Proc对象:
a = lambda {|a, b| puts "#{a}, #{b}"}
a.call(2,3)
Run Code Online (Sandbox Code Playgroud) 对于Ruby中的procs和lambdas有什么"简单"的解释吗?
我正在和ruby一起工作,我只是在学习lambdas.我有一个对象数组,我想根据不同的条件从数组中选择某些对象,如下所示:
result = array.select{|ar| ar.number > 4}
Run Code Online (Sandbox Code Playgroud)
我想把select的参数放到一个lambda表达式中,即我想放入|ar| ar.number > 4一个lambda表达式.我尝试了一些事情,包括:
result = array.select{lambda{|g| g.number > 4}}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我也试过这个:
l = lambda {g.number > 4}
result = array.select{|g| l}
Run Code Online (Sandbox Code Playgroud)
这也行不通.另外我需要将我的lambda express传递给一个函数,所以我不认为我做的第一种方式会有效.我该怎么做?