이 루비 코드 :에 수학 연산을 수행 할 때정의되지 않은 방법`- ' "100"에 대한 : 문자열
./to_f.rb:6: undefined method `-' for "100":String (NoMethodError)
이 이
합니까 루비 번호 문자열을 자동 변환하지 :
income = "100"
bills = "52"
puts income - bills
가 오류가 발생했습니다 그들?
이 루비 코드 :에 수학 연산을 수행 할 때정의되지 않은 방법`- ' "100"에 대한 : 문자열
./to_f.rb:6: undefined method `-' for "100":String (NoMethodError)
이 이
합니까 루비 번호 문자열을 자동 변환하지 :
income = "100"
bills = "52"
puts income - bills
가 오류가 발생했습니다 그들?
루비는 dynamically-typed는 strictly-typed가 (또는 "강력한 형식"입니다) 언어. 루아는 또 다른 언어입니다. 전자는 변수가 모든 클래스의 값을 보유 할 수 있음을 의미합니다. 후자 - 실행중인 것은 유형 강제 변환이 자동으로 수행되지 않음을 의미합니다.
역동적으로 입력되는 JavaScript와 은 느슨하게 입력 된과 대조됩니다. JavaScript에서는 var x = [] + false;
이라고 쓸 수 있으며 시도는 시도를 통해 도움이됩니다. 다른 예를 들면, "1" + 1 == "11"
이지만 "1" - 1 == 0
의 JavaScript입니다. 루비는 그러한 일을하지 않을 것입니다. 귀하의 경우에는
당신이 필요합니다 : 루비 각 클래스에서 operators are implemented as methods을 가장 운영자가 다양한 유형의 피연산자를 처리하는 방법을 선택할 수 있기 때문-
puts income.to_i - bills.to_i
참고. 예를 들어 :
class Person
def +(something)
if something.is_a?(Numeric)
self.weight += something
elsif something.is_a?(Time)
self.age += something
else
raise "I don't know how to add a #{something.class} to a Person."
end
end
end
대부분의 경우 핵심 라이브러리는 너무 영리하지 않으려 고합니다.
+ 연산자를 사용하여 문자열을 연결할 수 있기 때문에 숫자 값이 들어있는 두 문자열을 추가하거나 합칠 것인지 여부는 항상 명확하지 않습니다.
당신이 숫자를 들고 두 문자열이있는 경우, 그들에 어떤 수학을하기 전에 적절한 값 (INT 또는 플로트)로 변환 :
income = "100"
bills = "52"
puts income.to_f - bills.to_f
내 대답보다 훨씬 낫다! 고마워, 프로그. –