gpt4 book ai didi

ruby - 连续添加数字

转载 作者:数据小太阳 更新时间:2023-10-29 08:30:00 24 4
gpt4 key购买 nike

我正在尝试学习 Ruby,我在网上遇到了一个问题,我需要创建与此类似的东西:

add(1)         # => 1
add(1).(2) # => 3
add(1).(2).(3) # => 6

等等。

我已经阅读过,最接近完成这项工作的是以下代码:

def add(n)
Proc.new { |s| s + n }
end

这在一定程度上起作用。

我可以运行以下命令:

add(1)     # => #<Proc:0x007fb8aac309f0@(pry):2>
# or
add(1).(2) # => 3

但是当我尝试这样做的时候:

add(1).(2).(3)

我收到以下错误:

NoMethodError: undefined method call for 3:Integer

为什么我会收到此错误?我该如何更改此方法,以便它接受我提供的尽可能多的新值以添加自身而不给我错误?

最佳答案

供引用,这个问题来自CodeWars "A Chain Adding Function" .

实现这一点的最简单方法是定义Integer#call:

class Integer
def call(n)
self + n
end
end

def add(n)
n
end

puts add(1)
# 1
puts add(1).(2)
# 3
puts add(1).(2).(3)
# 6

返回的对象是普通的 Ruby 整数,而不是代理对象。

请注意,修改如此重要的类可能不是一个好主意。可以使用 refinements为了避免破坏其他 Ruby 部分:

module ChainAdding
refine Integer do
def call(n)
self + n
end
end
end

def add(n)
n
end

using ChainAdding

puts add(1)
# 1
puts add(1).(2)
# 3
puts add(1).(2).(3)
# 6

如果您正在学习 Ruby,那么您不应该首先关注这种元编程技巧。知道我们可以做到这一点很酷,但这并不意味着我们应该这样做。

关于ruby - 连续添加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45330033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com