문제

빠른 질문.

단어가 단수인지 복수인지 확인하기 위해 어떻게 테스트 할 수 있습니까?

정말 원해요 :

test_singularity('word') # => true
test_singularity('words') # => false

나는 레일이 가능하다고 내기!

감사.

도움이 되었습니까?

해결책

레일에서는 할 수 있습니다 string#singularize|#pluralize 진실 또는 거짓 값을 반환하기위한 비교.

그러나 나는 언어 자체의 특성으로 인해 완전히 정확한 백업이 필요할 수 있다고 생각합니다.

당신은 이런 일을 할 수 있습니다

def test_singularity(str)
  str.pluralize != str && str.singularize == str
end

그러나 얼마나 정확한 지 확인하기 위해 나는 빠른 단어 세트를 달렸다.

%w(word words rail rails dress dresses).each do |v|
  puts "#{v} : #{test_singularity(v)}"
end

word : true
words : false
rail : true
rails : false
dress : false
dresses : false

'드레스'가 복수화되기 때문에 실제로 약간 놀랐습니다. 그러나 #SINGULARIZE를 통과 할 때 약간의 걸림돌이됩니다.

'dress'.pluralize # => dresses
'dress'.singularize # => dres

다른 팁

대부분의 시간은 특이성이나 복수를 테스트하지 않습니다. 나는 단지 그것을 필요로하는 단수 또는 복수형으로 변환합니다.

~ 안에 레일 2.3.x 이것은 이런 글을 쓰는 것이 가능했습니다

plural_form = org_word.singularize.pluralize
singular_form = org_word.pluralize.singularize

이에 대한 추가 작업은 작업 기능을 쉽게 공급할 수 있습니다.

require 'active_support'

def is_singular?(str)
  str.pluralize.singularize == str
end


%w(word words rail rails dress dresses).each do |v|
  puts "#{v} : #{is_singular?(v)}"
end

다음 출력을 제공합니다.

word : true
words : false
rail : true
rails : false
dress : true
dresses : false

~ 안에 레일 4, 주어진 단어로 이제 훨씬 쉽습니다. 당신은 그냥 할 수 있습니다

plural_form = org_word.pluralize
singular_form = org_word.singularize

따라서 기능도 훨씬 쉬워집니다.

require 'active_support'

def is_singular?(str)
  str.singularize == str
end

루비 나 레일은 단어에서 "복수"를 테스트하기위한 특정 방법을 제공하지 않습니다.

Nowk가 말했듯이, 당신이 할 수있는 가장 많은 것은 word.pluralize 그리고 word.singularize. 이것은 당신에게 빠르고 생생하고 좋은 테스트 방법을 제공합니다. 그러나 그것은 때때로 실패 할 것입니다.

정밀도가 더 필요한 경우 사용해야합니다. 루비 언어학 보석, 드레스와 드레스를 제대로 다룰 수 있지만 더 무겁습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top