【问题标题】:Delete_if over an array with strings and numbers, RefactoredDelete_if 在包含字符串和数字的数组上,重构
【发布时间】:2014-08-29 23:29:36
【问题描述】:

我很困惑为什么以下方法不起作用。

def array_mod(source_array, letter_to_delete)
  source_array.delete_if {|x| 
    String===x && x.include?letter_to_delete }
end

基本上我有一个函数,它接受一个数组,为了测试目的,它将同时包含字符串和数字。第二个参数是一个字母。该函数应该遍历数组,跳过 Fixnum 值,并且 delete_if 元素是 a) 字符串和 b) 包含有问题的字母。我已经创建了这个函数,但正在尝试重构它以使其更专业。谢谢你们帮助我变得更好!

def array_mod(source_array, letter_to_delete)
  return source_array.delete_if do |x| 
      if x.is_a?(Fixnum) ==true
        next
      else
        x.include?letter_to_delete
      end
  end
end

【问题讨论】:

  • 我听不懂if x.is_a?(Fixnum) ==true这行。如果我是你,我会改成这样:if (x.is_a?(Fixnum) ==true)==true。只是要确定。呵呵..JK。你可以把它留到if x.is_a?(Fixnum)

标签: ruby loops refactoring


【解决方案1】:

你缺少括号:

def array_mod(source_array, letter_to_delete)
  source_array.delete_if {|x| x.is_a?(String) && x.include?(letter_to_delete) }
end

【讨论】:

  • String===x 不可接受有什么原因吗?我的理解是,这只是意味着'x'是'string'类型,它与x.is_a?(String) no?
  • @HectorOfTroy407 - 你是对的,我更喜欢使用is_a?,因为它更明显,并且将=== 用于案例陈述。
  • 作为健忘的类型,我可能会写str===String 并且可能很难找到错误。我不太可能写String.is_a? str。 (我有时把=~写成~=,把||=写成=||)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2018-02-20
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
相关资源
最近更新 更多