Ruby
-
Programming Ruby(12) 문자열Ruby 2016. 10. 26. 22:56
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 문자열 루비 문자열은 간단히 말하면 문자열 시퀀스다. 보통 출력가능한 문자를 저장하지만 반드시 그래야만 하는 것은 아니다. 문자열에는 이진(binary) 데이터를 저장할 수도 있다. 문자열은 String 클래스의 객체다. 큰따옴표로 묶인 문자열은 많은 이스케이프 시퀀스를 지원한다. 그 중 가장 일반적인 것이 줄바꿈을 나타내는 \n 이다. 또한 #{ expr } 과 같은 식으로 쓰면 루비 코드의 결과를 문자열로 변환해준다. 만약 # { } 안의 표현식이 전역 변수나 클래스 변수, 인스턴스 변수라면 중괄호를 생략해도 된다. "Seconds/day : #{24*60*60}" # => Seco..
-
루비 HTTP POST Request 나를 미치게 하다.Ruby 2016. 10. 26. 22:03
http://www.mudskipper-solutions.com/home/how-to-send-jsonhttp-using-ruby 위의 블로그 내용을 보면 Ruby 뿐만 아니라 다수의 언어들이 내장 HTTP 클래스의 Post 의 Body에 JSON Data를 전송할 수 없도록 한다고 한다. 이틀전. Ruby 2.0 Documentation 대로 HTTP Post Request Body에 Json String 을 넣었다가 원인을 알수 없는 헬게이트로 빠지게 되었다. 분명 Request 클래스의 Body에는 Json Data가 포함되어 있는데 서버에선 Request body 가 없다는 응답만 계속되었다. 이틀을 날려먹고 구글링하다가 결국 찾아낸 정보... 루비를 패버릴수도 없고 ;; 대체 왜 그런걸까...?..
-
Programming Ruby (10) 모듈Ruby 2016. 10. 25. 23:13
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 모듈 모듈은 메서드와 클래스, 상수를 함께 하나로 묶는 수단이다. 모듈은 다음과 같은 두 가지 장점이 있다. 1) 모듈은 이름 공간을 제공해서 이름이 충돌하는 것을 막아준다. 2) 모듈은 믹스인 기능을 구현하는데 이용한다. 이름공간 서로 다른 파일에 정의된 변수의 중복을 막기 위해 모듈 구조를 사용한다. 모듈은 이름 공간을 정의하는데 이것은 다른 메서드나 상수에 의해 방해 받을 염려 없이 메서드와 상수를 정의할 수 있는 일종의 샌드박스이다. trig.rb module trig PI = 3.141592654 def Trig.sin(x) # ... end def Trig.cose(x) # ..
-
Programming Ruby (9) 상속Ruby 2016. 10. 25. 23:12
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) (이전 포스팅 내용 이어서) 컨테이너는 어디에나 있다 컨테이너, 블록, 반복자는 루비의 핵심 개념이다. 루비 코드를 작성하면 할수록 전통적인 반복문을 벗어나는 자신을 발견하게 될 것이다. 대신 자신의 내용을 반복하는 것을 돕는 클래스를 작성하게 된다. 이런 코드가 간결하고 읽기 쉽고, 또 관리도 편하다는 사실도 금방 깨닫게 될 것이다. 루비 라이브러리들과 프레임워크를 사용하는 과정에서 자연스럽게 많은 연습을 하게 될 것이다. 상속과 메시지 to_s 를 구현하지 않은 클래스의 객체들도 to_s 메서드 호출에 대해 무언가를 반환해준다. 이것이 어떻게 가능한지 이해하려면 상속과 자식 클래스 ..
-
Programming Ruby (8) 트랜잭션을 위한 블록, 객체로서의 블록Ruby 2016. 10. 24. 23:50
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 트랜잭션을 위한 블록 트랜잭션 제어 하에서 동작해야 하는 코드를 작성할때 블록을 사용할 수 있다. 예를 들어 파일을 열고 그내용으로 어떤 작업을 하고 이 작업을 마치면 이 파일이 닫힌다는 사실을 확신하고 싶다고 하자. 블록을 사용하는 방식은 단순하게 표현할수 있다. 다음 예제는 예외처리를 포함하지 않는 간단한 구현을 보여준다. class File def self.open_and_process(*args) f = File.open(*args) yield f f.close() end end File.open_and_process("testfile", "r") do |file| while l..
-
Programming Ruby (7)루비 2의 게으른 열거자Ruby 2016. 10. 24. 23:48
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 루비2의 게으른 열거자 열거자를 통해 무한한 시퀀스를 생성하는 데는 문제가 하나있다. select 와 같은 탐욕적(?)이지 않은 특별한 메서드를 만들어야 한다. 다행히도 루비 2.0에는 이러한 기능이 내장되어 있다. 어떤 루비 열거자이든 Enumerator#lazy 메서드를 호출하면 Enumerator::Lazy 객체를 반환한다. 다른 열거자와 같은 방식으로 동작하지만 무한한 시퀀스에 대해서도 정상적으로 동작하도록 select는 map과 같은 메서드들이 재정의 되어 있다. 이를 다른 방식으로 표현하자면 게으른 버전의 메서드들은 데이터가 요청되기 전까지는 어떠한 데이터도 사용하지 않는다...
-
Programming Ruby (6) 열거자와 외부 반복자Ruby 2016. 10. 24. 23:47
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 열거자(Enumerator)와 외부 반복자 다른 언어에서는 컬렉션이 자신의 반복자를 포함하지 않고 외부 반복자 헬퍼 객체를 만들어 사용한다(Iterator..) 루비는 투명한 언어이다. 루비 프로그램을 작성할 때는 하고자 하는 일에만 집중하면 되고, 언어 자체적으로 지원하는 발판 코드를 작성하느라 고민할 필요가 없다. 루비 내장 Enumerator 클래스는 외부 반복자를 제공한다. 배열이나 해시에 대해 to_num 메서드를 호출하는 것만으로 Enumerator 객체를 생성할 수 있다.(enum_for도 같은 메서드다) a = [1, 3, "cat"] h = [ dog: "canine",..
-
Programming Ruby (5) 반복자Ruby 2016. 10. 24. 23:46
[출처] Programming Ruby (본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.) 반복자 구현하기 루비에서 반복자란 코드 블록을 호출할 수 있는 메서드를 이야기한다. 먼저 블록은 메서드를 호출한 다음에만 나온다는 것과 코드 블록은 루비 해석기가 이를 해석하는 순간에 실행되는 것이 아니라는 점을 설명했다. 루비는 지역변수, 현재 객체 등과 같은 블록이 나타낸 시점의 맥락을 저장해 두고 메서드를 실행해 간다. 메서드에서 yield 문을 사용해서 마치 코드 블록을 하나의 메서드인 것처럼 호출할 수 있다. yield를 사용해 메서드 안에서 언제든 코드블록 호출이 가능 하다. 다음은 yield를 사용하는 예이다. def two_times yield yield end two_t..