문자열이 주어지면 또는 다음을 '123'
만들 수 있습니다 .Float
Integer
x = Float('123.45')
y = Integer('123')
동적 타이핑 연습으로, Numeric
최상위 숫자 클래스 인 을 확장 하여 숫자를 문자열로 변환하고 역순으로 다시 원래 유형으로 되돌리고 싶습니다 .
이렇게하면 다음과 같이 할 수 있습니다.
x = (123).reverse
// x == 321
아니면 이거:
y = (54.321).reverse
// y == 123.45
하나의 구현은 다음과 같습니다. (올바르게 작동합니다)
class Numeric
def reverse
str = self.to_s.reverse
if self.is_a?(Float)
return Float(str) # or str.to_f
elsif self.is_a?(Integer)
return Integer(str) # or str.to_i
end
end
end
그러나 유형 목록을 확인하는 대신 결과를 동적으로 만들고 싶습니다. 나는 사용해 보았다 Class.new()
:
class Numeric
def reverse
str = self.to_s.reverse
self.class.new(str)
end
end
Float('123.45')
또는을 ( 를) 호출 할 수 있기 때문에 이것이 작동 할 것이라고 생각했습니다 Integer('123')
. 그러나 다음 오류가 발생합니다.
irb(main):047:0> (54.321).reverse
NoMethodError: undefined method `new' for Float:Class
from (irb):44:in `reverse'
from (irb):47
from /Users/aaron/.rvm/rubies/ruby-2.1.1/bin/irb:11:in `<main>'
irb(main):048:0> (123).reverse
NoMethodError: undefined method `new' for Fixnum:Class
from (irb):44:in `reverse'
from (irb):48
from /Users/aaron/.rvm/rubies/ruby-2.1.1/bin/irb:11:in `<main>'
그래서 두 가지 질문이 있습니다.
Float('123.45')
또는 Integer('123')
작업들은 구현하지 않는 경우 new
?Numeric.reverse()
조건없이 어떻게 구현할 수 있습니까?음수와 같이 작동하지 않는 다른 경우가 있다는 것을 알고 있지만 (아직) 그 문제에 대해서는 관심이 없습니다.
어떻게 Float('123.45')
또는 Integer('123')
작업들은 새로운 구현하지 않는 경우?
그들은 Kernel
메서드 Kernel::Float
와 Kernel::Integer
각각 여기 에서 더 많은 정보를 호출합니다.
Numeric.reverse()
조건없이 어떻게 구현할 수 있습니까?
이렇게 :
class Numeric
def reverse
str = self.to_s.reverse
method(self.class.to_s).call(str)
end
end
이 method
메서드는 문자열 또는 기호를 메서드로 변환 한 다음 call
원하는 문자열을 사용 하여 전달하여 호출 할 수 있습니다 .
예: method((123.2).class.to_s).call('321') # => 321.0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다