我怎么写这个以便更容易理解?

时间:2010-06-26 09:22:12

标签: ruby

是否存在以这样的方式编写这样的代码并使其更清晰的方法?

a = (a.split(" ")[1..-1]).join(" ")

删除句子的第一个单词但代码看起来并不富有表现力。

6 个答案:

答案 0 :(得分:5)

<强>码

a = a.split[1..-1] * " "

<强>解释

String#split的默认参数是“”

Array * StringArray.join(String)

的别名

第二个想法,我不确定它对于不熟悉ruby的人本身是否更透明。但是任何使用过Ruby字符串的人都会理解正在发生的事情。它比原始版本更干净。


更新

根据just-my-correct-opinion的答案(你们都应该投票而不是我的),如果你运行的是Ruby 1.9.1(无论如何应该是这样)或Ruby 1.8.7,你可以做:

a = a.split.drop(1) * " "

答案 1 :(得分:5)

对于习惯阅读rexep的人来说这很干净:

a = a.sub(/^\S+\s/, "")

因人而异

答案 2 :(得分:5)

irb(main):024:0> "this is a test".split.drop(1) * " "
=> "is a test"

已编辑添加:

  

说明:

     
      
  • 默认情况下#split分隔空格。

  •   
  • #drop(1)摆脱了第一个条目。

  •   
  • * " "#join(" ")的作用相同。

  •   

答案 3 :(得分:3)

可能会使流程明确有用

words = a.split
words.pop
a = words.join " "

答案 4 :(得分:2)

如果你在整个代码中使用它,你可能想要创建 String和Array中的方法使您的代码可读。 (也适用于1.8.6)

class String
  def words
    split
  end
end

class Array
  def but_first
    self[1..-1]
  end
  def to_sentence
    join(' ')
  end
end

str = "And, this is a sentence"

puts str.words.but_first.to_sentence

答案 5 :(得分:1)

如下所示

a = a[a.index(' '), a.length-(a.index(' ')+1)]

不检查