Ruby 中的闭包

发布于 2024-08-13 04:41:09 字数 149 浏览 4 评论 0原文

我在关闭方面遇到了一些麻烦,我想知道是什么 规范的 make-adder 过程的等效代码将在 红宝石。

在方案中它会是这样的:

(define (make-adder n)
 (lambda (x) (+ x n))

I'm having a little trouble with closures and I'd like to know what
the equivalent code for the canonical make-adder procedure would be in
Ruby.

In scheme it would be like:

(define (make-adder n)
 (lambda (x) (+ x n))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

百变从容 2024-08-20 04:41:10

一个区别是,Scheme 只有一种过程,而 Ruby 有四种。大多数时候,它们的行为与标准 lambda 非常相似,但您应该尝试 深入了解所有细节

One difference is that while Scheme has only one kind of procedure, Ruby has four. Most of the time, they behave similarly enough to your standard lambda, but you should try to understand all the details in depth.

隔纱相望 2024-08-20 04:41:10

在 1.9 中还有另一种方法:

make_adder = -> n, x { n + x }
hundred_adder = make_adder.curry[100]
hundred_adder[4] # => 104

Here's another way to do it in 1.9:

make_adder = -> n, x { n + x }
hundred_adder = make_adder.curry[100]
hundred_adder[4] # => 104
沙与沫 2024-08-20 04:41:10

这是一个非常好的屏幕截图,解释了 Ruby 中的块和闭包:
http://www.teachmetocode.com/screencasts/8

Here is a pretty nice screen-cast explaining blocks and closures in Ruby:
http://www.teachmetocode.com/screencasts/8

七堇年 2024-08-20 04:41:09

它实际上非常接近...

def make_addr n
  lambda { |x| x + n }
end
t = make_addr 100
t.call 1
101

在 1.9 中你可以使用...

def make_addr n
  ->(x) { x + n }
end

It's actually very close...

def make_addr n
  lambda { |x| x + n }
end
t = make_addr 100
t.call 1
101

In 1.9 you can use...

def make_addr n
  ->(x) { x + n }
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文