【发布时间】:2014-06-28 04:16:37
【问题描述】:
这是对我正在为代码大战开发的代码型的描述。 kata 的目标是实现这一点:
这个 Kata 的目的是修改 Fixnum 类以赋予它 palindrome_below 方法。此方法返回所有从(包括 1)到但不包括自身的数字,这些数字是给定基数的回文数。
例如以 2 为底(二进制)
1 = "1"
2 = "10"
3 = "11"
4 = "100"
因此 1 和 3 是基数为 2 的回文数,该方法应返回以下内容。
5.palindrome_below(2)
=> [1, 3]
这是我目前为这个 kata 编写的代码:
class Fixnum
def self.palindrome_below(binary)
palindrome_match = []
until self == 0
if to_s(binary) == to_s(binary).reverse
palindrome_match << self
self -= 1
end
end
palindrome_match
end
end
我试图将self 减少1。 Sublime 告诉我,我无法减少 self 的值,但我需要减少 self。因为这是类方法,所以需要修改self。
这是我尝试解决的方法:
class Fixnum
def self.palindrome_below(binary)
palindrome_match = []
self_placeholder = self
until self_placeholder == 0
if self_placeholder.to_s(binary) == self_placeholder.to_s(binary).reverse
palindrome_match << self_placeholder
self_placeholder -= 1
end
end
palindrome_match
end
end
这一次,我将self 放在一个包装变量中,以便我可以修改它。当我尝试这个时,它说有一个名为palindrome_below 的未定义方法。做这个实现应该有猴子补丁Fixnum。我不确定我做错了什么。有人能指出我正确的方向吗?
【问题讨论】:
-
没问题。你可以在这里找到它codewars.com/kata/530d0298e09e54a3620006c2/train/ruby 不过你可能需要注册/登录。
-
正如@sawa 所说,您无疑需要一个实例方法,就像您在示例中所使用的那样:
5.palindrome_below(2)。没有必要更改self,事实上,即使您愿意也无法更改。 (更改self的唯一方法是调用方法或创建类或模块。)试试这个:def palendrome(base); 1.upto(self-1).select { |n| ....}。1到self-1将被传递到块中并分配给块变量n。对于参数base的给定值,当且仅n计算为palendrome 时,您必须向返回true的块添加一个表达式。 -
@CarySwoveland - 我认为您的解决方案比公认的答案要好得多 - 您为什么不将其发布为一个?
-
谢谢@Uri,但我没有足够的时间来发布正确的答案。如果有帮助,那就足够了。
标签: ruby