2013-04-20 4 views
0

메소드 서명에서 변수 식별자를 문자열로 처리하려면 irb의 동작을 어떻게 강요합니까?루비 irb에서 루비 캐스트 메소드 입력 변수를 문자열로 입력

irb 기반 계산 도구를 만들려고하는데 irb 셸에서이 도구를 사용하는 사용자의 입력을 줄이려고합니다. 내 사용자가 루비 프로그래머가 아니거나 루비 구문에 대해 많이 알고 있다고 가정합니다. The는 명령 행에 어떤 편의 시설을 가지고있을 수 있습니다.

I이 파일 내부의 파일

calculator.rb 

이는

def calculate(value, units) 

... some logic 

end 

은 내가

를 입력하도록 사용자에게 지시 때문에

irb -r path/to/calculator.rb 

같은 IRB를 발사하는 사용자에게 지시입니다

calculate(10, inches) 

반환 값을 irb로 가져 오기

두 번째 매개 변수를 따옴표로 묶어야한다는 것을 사용자가 이해하지 않고 어떻게 할 수 있습니까? 즉 나는 사용자가

calculate(10, "inches") 

그것이 내 스크립트 안에 내 메서드에 전달되기 전에 대신 문자열 변수 식별자로 사용자의 입력을 캐스팅 할 수 있습니다를 입력 할 필요가 싶지 않아? 어쩌면 내가하고 싶은건 irb shell을 근본적으로 깨뜨리지 않고는 불가능한가?

+0

루비 자체를 다시 컴파일해야하기 때문에 IRB 이상을 깨뜨릴 수 있습니다. 문자열이 구분된다는 기대는 인터프리터 자체에서 정의되며 모든 언어와 스크립트에서 사용됩니다. 그렇게했다면 모든 것이 중단 될 것입니다. –

+0

다시 컴파일 할 필요는 없으며 대신 method_missing을 사용할 수 있습니다. –

답변

0

putsgets을 사용하는 경우 프로그래머가 아닌 사람에게 적합합니까?

def calculate 
    puts "Which number would you like to convert?" 
    number = gets.to_i 
    puts "What do you want to convert it to?" 
    type = gets 
    # your conversion logic 
    puts result 
end 
+0

아 그래, 훨씬 의미가 있습니다. 감사. –

0

실제로 method_missing을 사용하여 요청한 방식으로 처리 할 수 ​​있습니다. 일치하는 단위는 예외를 발생시키는 대신 문자열로 변환됩니다.

SO_CALC_UNITS = %w[inches feet yards meters parsecs] 
def method_missing(method) 
    if SO_CALC_UNITS.include?(method.to_s) 
    method.to_s 
    else 
    super(method) 
    end 
end