- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我试图理解为什么我们真的需要 ruby(或与此相关的任何其他语言)中的 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 的示例。
最佳答案
的确,您不需要匿名函数(或 lambda,或任何您想调用它们的东西)。但是有很多东西您不需要。您不需要类——只需将所有实例变量传递给普通函数即可。然后
class Foo
attr_accessor :bar, :baz
def frob(x)
bar = baz*x
end
end
会变成
def new_Foo(bar,baz)
[bar,baz]
end
def bar(foo)
foo[0]
end
# Other attribute accessors stripped for brevity's sake
def frob(foo,x)
foo[0] = foo[1]*x
end
同样,除了 loop...end
之外,您不需要任何循环与 if
和 break
.我可以继续说下去。1 但是您想要使用 Ruby 中的类进行编程。您希望能够使用 while
循环,甚至可能是 array.each { |x| ... }
,并且您希望能够使用 unless
而不是 if not
.
就像这些功能一样,匿名函数可以帮助您优雅、简洁、明智地表达事物。会写some_function(lambda { |x,y| x + f(y) })
比必须写要好得多
def temp(x,y)
x + f(y)
end
some_function temp
必须中断代码流才能写出 def
的体积要大得多fed 函数,然后必须给它一个无用的名字,当它很清楚地编写内联操作时。的确,没有什么地方是您必须使用 lambda 的,但是有很多地方我宁愿使用 lambda。
Ruby 使用 block 解决了很多使用 lambda 的情况:所有函数都像 each
, map
, 和 open
可以将 block 作为参数的基本上是采用特殊情况的匿名函数。 array.map { |x| f(x) + g(x) }
与array.map(&lambda { |x| f(x) + g(x) })
相同(其中 &
只是使 lambda 以与裸 block 相同的方式“特殊”)。同样,您可以写出一个单独的 def
fed 每次都起作用——但你为什么想要呢?
除 Ruby 之外,支持这种编程风格的语言没有 block ,但通常支持更轻量级的 lambda 语法,例如 Haskell 的 \x -> f x + g x
,或 C# 的 x => f(x) + g(x);
2。任何时候我有一个函数需要采取一些抽象行为,比如 map
, 或 each
, 或 on_clicked
,我将感谢能够传入 lambda 而不是命名函数,因为它更容易。最终,您不再认为它们有些特别——它们与数组的文字语法一样令人兴奋,而不是 empty().append(1).append(2).append(3)
。 .这只是该语言的另一个有用部分。
1:在退化的情况下,你真的只需要 eight instructions : +-<>[].,
. <>
沿着数组移动一个假想的“指针”; +-
递增和递减当前单元格中的整数; []
执行非零循环;和 .,
做输入输出。事实上,你真的只需要 one instruction ,例如 subleq a b c
(从 a
中减去 b
,如果结果小于或等于零,则跳转到 c
。
2:我从未实际使用过 C#,因此如果该语法有误,请随时进行更正。
关于ruby - 何时何地使用 Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352191/
我有使用 namespace 的代码,其中有一些,我的大脑有些困惑。 如果我有类似的东西: #include protected: vector mRegistryList; 编译器提示 v
是否有好的算法/分词器/正则表达式或其他一些技术可以检测用户输入的英语句子的哪一部分是“谁”、“什么”、“何时”和“哪里”? 理想情况下,它可以在 Elasticsearch 或 javascript
我因使用 uint 而不是 size_t 而受到很多批评,但每次我检查我正在使用的工具链时都会发现 size_t 被定义为一个 uint。 是否有任何编译器实现中 size_t 实际上不是 uint?
在使用 MongoDB 的应用程序中,何时/何地是进行关系数据库中迁移的数据库更改的最佳位置? 比如创建索引或者设置shard key应该如何管理?这段代码应该去哪里? 最佳答案 最好有意识地在 sh
我是一名优秀的程序员,十分优秀!