мне, выгода (Исключение) пункт должен был получить любое исключение вообще. Есть ли какая-либо причина, почему она не была бы?
единственная возможность, о которой я могу думать, состоит в том, что что-то еще ловит его перед Вами и обрабатывает его способом, который, кажется, неперехваченное исключение (например, выход из процесса).
мой блок попытки/выгоды не поймает его и вместо этого останавливает выполнение как необработанное исключение.
необходимо найти то, что вызывает процесс выхода. Это могло бы быть что-то другое, чем необработанное исключение. Вы могли бы попытаться использовать собственный отладчик с набором точки останова на "{, kernel32.dll} ExitProcess". Тогда используйте SOS для определения то, что управляемый код называет процессом выхода.
While trying to come up with my own method (included below for reference), I realized that there's some pretty nasty corner cases. Better just use the method already provided in Facets, the mostest awesomest Ruby library evar:
require 'facets/string/titlecase'
class String
def titleize
split(/(\W)/).map(&:capitalize).join
end
end
require 'test/unit'
class TestStringTitlecaseAndTitleize < Test::Unit::TestCase
def setup
@str = "i just saw \"twilight: new moon\", and man! it's crap."
@res = "I Just Saw \"Twilight: New Moon\", And Man! It's Crap."
end
def test_that_facets_string_titlecase_works
assert_equal @res, @str.titlecase
end
def test_that_my_own_broken_string_titleize_works
assert_equal @res, @str.titleize # FAIL
end
end
If you want something that more closely complies to typical writing style guidelines (i.e. does not capitalize words like "and"), there are a couple of "titleize" gems on GitHub.
Если вы используете Rails (на самом деле все, что вам нужно, это ActiveSupport, который является частью Rails), вы можете использовать titleize
:
"MY STRING HERE".titleize
# => "My String Here"
string = "MY STRING HERE"
string.split(" ").map {|word| word.capitalize}.join(" ")
Как это работает:
.split ("")
разбивает его на пробелы, так что теперь у нас есть массив, который выглядит как ["my", "string", "here"]
. Вызов map
выполняет итерацию по каждому элементу массива, присваивая его временной переменной word
, которую мы затем вызываем capitalize
. Теперь у нас есть массив, который выглядит как ["My", "String", "Here"]
, и, наконец, мы превращаем этот массив обратно в строку, join
, добавляя каждый элемент с пробел ("").
"HELLO WORLD HOW ARE YOU".gsub(/\w+/) do |word|
word.capitalize
end
#=> "Hello World How Are You"
"MY STRING HERE".gsub(/\b('?[a-z])/) { $1.capitalize }
Если вы используете Rails / ActiveSupport, этот метод уже доступен бесплатно.