Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么我在更改两行的顺序后得到零?_Ruby - Fatal编程技术网

Ruby 为什么我在更改两行的顺序后得到零?

Ruby 为什么我在更改两行的顺序后得到零?,ruby,Ruby,在titleize方法中,当我颠倒包含单词的行的顺序时,为什么会得到零。首先,大写和单词。join(“” def titleize(x) words = x.split(" ").collect do |word| if %w(the and over).include?(word) word else word.capitalize end end words.first.capitalize! words.join(" ") en

titleize
方法中,当我颠倒包含
单词的行的顺序时,为什么会得到零。首先,大写
单词。join(“”

def titleize(x)
words = x.split(" ").collect do |word|
    if %w(the and over).include?(word)
        word
    else 
        word.capitalize
    end
end 

words.first.capitalize!
words.join(" ")
end
为什么当我颠倒words.first.capitalize和words.join(“”)行的顺序时会得到零

这就是原因:

"abb".capitalize # => "Abb"
"Abb".capitalize! # => nil
"Abb".capitalize # => "Abb"
说:

通过将第一个字符转换为大写,将其余字符转换为小写来修改str如果未进行任何更改,则返回nil。注:大小写转换仅在ASCII区域有效

当你把行
words.first.capitalize
在方法的末尾,
String.capitalize尝试将已大写的单词大写。您使用的是
bang(!)
版本,因此,根据文档,您得到的是
nil

一个例子:

def titleize(x)
  words = x.split(" ").collect do |word|
      if %w(the and of).include?(word)
          word
      else 
          word.capitalize
      end
  end 

  words.join(" ")
  words.first.capitalize!
end

titleize("he great book") # => nil
测试时,您的输入字符串可能未包含此处列出的任何单词
%w(和的)
。我建议你改用

为什么当我颠倒words.first.capitalize和words.join(“”)行的顺序时会得到零

这就是原因:

"abb".capitalize # => "Abb"
"Abb".capitalize! # => nil
"Abb".capitalize # => "Abb"
说:

通过将第一个字符转换为大写,将其余字符转换为小写来修改str如果未进行任何更改,则返回nil。注:大小写转换仅在ASCII区域有效

当你把行
words.first.capitalize
在方法的末尾,
String.capitalize尝试将已大写的单词大写。您使用的是
bang(!)
版本,因此,根据文档,您得到的是
nil

一个例子:

def titleize(x)
  words = x.split(" ").collect do |word|
      if %w(the and of).include?(word)
          word
      else 
          word.capitalize
      end
  end 

  words.join(" ")
  words.first.capitalize!
end

titleize("he great book") # => nil
测试时,您的输入字符串可能未包含此处列出的任何单词
%w(和的)
。我建议你改用

上修改字符串的方法,如
大写
(和
gsub!
delete!
等),仅在对字符串进行更改时返回该字符串。如果未进行任何修改,则返回
nil

irb(main):007:0> "the".capitalize!
=> "The"
irb(main):008:0> "The".capitalize!
=> nil
很可能您的字符串已经大写(除非它以“The”、“and”或“over”开头),所以当您的
大写时最后一次调用,两者都
大写
和您的方法返回
nil
,因为字符串未被修改。

上的方法修改字符串,如
大写
(和
gsub!
delete!
等),仅在对字符串进行更改时返回该字符串。如果未进行任何修改,则返回
nil

irb(main):007:0> "the".capitalize!
=> "The"
irb(main):008:0> "The".capitalize!
=> nil

很可能您的字符串已经大写(除非它以“The”、“and”或“over”开头),所以当您的
大写时最后一次调用,两者都
大写
和您的方法返回
nil
,因为该字符串未被修改。

告诉我们您使用了哪个字符串,得到了
nil
?这里有一个隐藏的actula答案。告诉我们您使用了哪个字符串,您得到了
nil
?在英语中,我们不使用
:-
。这不是风格上的决定,只使用
是正确的标点符号,前面没有空格。此外,在句子中逗号后面有一个空格来分隔单词,就像没有逗号一样。@theTinMan感谢您更正它。我的英语不是很好!这是我的第三种语言:(在英语中,我们不使用
:-
。这不是文体上的决定,只使用
是恰当的标点符号,没有前面的空格。此外,句子中逗号后面有空格来分隔单词,就好像没有逗号一样。@theTinMan谢谢你纠正它。我的英语不太好!这是我的第三种语言:(