아주 기본적인 금융 모듈을 Ruby에 작성하여 직접 계산을 쉽게 처리했습니다. 때로는 irb
을 입력하고 함수를 호출하기가 훨씬 쉽습니다. 그러나 이상한 점은 모듈에 future_value (Finance::CompoundInterest.future_value
)라는 메서드가있는 서브 모듈이 있다는 것입니다 ... 그러나 irb
에 따르면 존재하지 않습니다? 그것은 아주 작지만 매번 수식을 입력하는 대신 복합 관심사를 사용할 수있는 것을 선호합니다.Ruby의 하위 모듈에 메소드를 올바르게 캡슐화하려면 어떻게해야합니까? 내 방법은 어디에도 나타나지 않을 것입니다!
irb
에로드 할 때 오류나 경고가 표시되지 않으며이 방법은 모든 의도와 목적으로 보이지 않습니다. 거의 슬프게도, 나는 Finance::Mortgage
을 인스턴스화 할 수 있습니다. 나는이 이상한 상황을 얻기 위해 잘못 입력 한 내용을
module Finance
module CompoundInterest
def future_value(present_value, interest, length)
interest /= 100 if interest >= 1 # if given in percent 1..100
present_value * ((1 + interest)**length)
end
end
class Mortgage
attr_accessor :amount, :rate, :years, :payment, :interest_paid
def initialize(amount, rate, years)
@amount, @rate, @years = amount, rate, years
i = rate/12
n = years * 12
m = (1 + i)**n
@payment = ((i * m)/(m - 1)) * amount
@interest_paid = @payment * n - amount
end
end
end
:
여기 내 금융 단위입니까? Ruby 1.8.7-72를 사용하고 있습니다.
"def some_method"를 모듈에 작성하면 모듈 인스턴스 메소드가 정의됩니다.이 메소드는 "include SomeModule"을 작성할 때 인스턴스 메소드로 클래스에 복사됩니다. – Chuck
오! 나는 그것을 고려하지 않았다. 포함될 때 클래스 메소드가 구현 되는가? –
아니요, 모듈의 자체 메소드가 포함될 때 클래스 메소드로 혼합되지 않습니다. "포함 된"훅과 Class.extend 메소드가 무엇인지 알고 싶습니다. 더 많은 정보를 원하시는 지 물어보십시오. – mikej