2016-07-25 2 views
0

나는 루비를 배우기 때문에 몇 권의 책, 튜토리얼, foruns 등을 읽는 중이다. 그래서 나는 이것에 대해 아주 새로운 것이다. 나는 배울 수 있도록 주식 시스템을 개발하려고합니다. 내 질문은 다음과 같다 : Ruby : 저장 정보를위한 해시, 배열 및 객체

내가 가게 거래에 다음 생성 (코드의 단지 몇 부분)

transactions.push type: "BUY", date: Date.strptime(date.to_s, '%d/%m/%Y'), quantity: quantity, price: price.to_money(:BRL), fees: fees.to_money(:BRL) 

그리고 한 동료 here하면이를 저장하는 트랜잭션 클래스를 만들 것을 제안했다. 그래서, 내가 가진 것을 다음 저장 정보를, 내가 그랬어 :

이제
@dividends_from_stock << DividendsFromStock.new(row["Approved"], row["Value"], row["Type"], row["Last Day With"], row["Payment Day"]) 

, 첫 번째 질문 : 더 나은 방법을? 배열의 해시 또는 배열의 객체? 그리고 왜?

이 @dividends_from_stock은 'dividends'메서드에 의해 반환됩니다.

puts ciel3.dividends.find_all {|dividend| Date.parse(dividend.last_day_with) > Date.parse('12/05/2014')} 

내가 다음 얻을 :

내가 발견 할 수 있어요 이와
#<DividendsFromStock:0x2785e60> 
#<DividendsFromStock:0x2785410> 
#<DividendsFromStock:0x2784a68> 
#<DividendsFromStock:0x27840c0> 
#<DividendsFromStock:0x1ec91f8> 
#<DividendsFromStock:0x2797ce0> 
#<DividendsFromStock:0x2797338> 
#<DividendsFromStock:0x2796990> 

좋아 (내 생각)

나는 특정 날짜보다 지불 된 모든 배당금을 찾으려면 2014 년 12 월 12 일보다 이전 날짜 인 모든 개체 그러나 (두 번째 질문) 객체 내부에 저장된 '값'(또는 기타 정보)에 관한 정보를 어떻게 얻을 수 있습니까?

+0

하나의 StackOverflow 질문에 두 질문을 넣었습니까? :) –

+0

그건 정말 좋은 질문입니다 !! 웃음! 그들은 나를 위해 상관 관계가있었습니다. 1- 정보를 저장하는 방법 및 2- 저장된 정보를 검색 (탐색)하는 방법. 해시에 대해서는 이미 다른 게시물 (원래 질문의 링크) 때문에 수행 방법을 알고있었습니다. Tnks! –

답변

1
  1. 일반적으로 클래스를 정의하는 것이 좋습니다. 클래스에는 이름이 있습니다. 그들은 당신의 프로그램이 커질 때 어떤 일이 벌어지고 있는지 이해하도록 도와 줄 것입니다. var.class과 같이 항상 각 변수의 클래스를 볼 수 있습니다. 어디에서나 해시를 사용하면 이러한 호출은 항상 Hash을 반환하기 때문에 혼란 스러울 것입니다. 그러나 사물에 대한 클래스를 정의하면 클래스 이름이 표시됩니다.
  2. 필요한 정보를 반환하는 클래스의 메서드를 정의하십시오. to_s이라는 메서드를 정의하면 루비는 개체를 인쇄하거나 보간 (puts "Some #{var} here")에서 사용할 때 개체의 장면 뒤에서 호출합니다.
+0

어디에서'def to_s'를 써야하나요? 나는'클래스 주식'을 가지고 있는데,'클래스 배당금 '클래스를 생성하는'read_in_csv_data'메소드를 가진 새로운'클래스 CsvReader' 메소드를 생성하는'배당금'메소드가 있습니다. 그리고'CsvReader'는 저장된'@ dividends_from_stock'을 리턴하는 메소드'dividends_from_stock'도 가지고 있습니다. 이'def to_s'가 어디로 가는가 ?? 나는 여기에서 길을 잃는다 ... –

+0

당신은 당신이 인쇄 할 필요가있는 모든 클래스들에서'to_s'를 정의 할 수있다. :) –

1

거래/거래의 개념과 원장 역할을하는 거래 목록을 나타내는 일종의 일류 모델이 필요할 것입니다.

메모리에서 장난감 개체를 조작하는 대신 데이터베이스에 더 가까이 조종하는 것이 좋습니다. Sequel은 매우 단순한 ORM이 될 수 있지만, ActiveRecord은 종종 초보자에게 친숙하고 덜 날카로운 모서리를 가지고 있습니다.

나체 해시 또는 배열을 사용하면 프로토 타입을 작성하고 무언가가 원칙적으로 작동하는지 확인할 수 있습니다. 그 이상의 것들을 적절한 클래스에 제공하는 것이 중요합니다. 그래서 당신은 그것들을 적절하게 연관시킬 수 있고, 어떻게 이들이 함께 어울리는 지 세분화 할 수 있습니다.

심지어 TransactionHistory은 무료로 해당 기능을 모두 얻은 Array에서 파생 된 클래스로 시작하여 필요에 따라 사용자 지정 항목을 추가 할 수 있습니다.

예를 들어, 에 대한 꽤 껄끄 러운 인터페이스가 있습니다.이 인터페이스는 row의 형식을 그대로 적용하여 initialize 기능을 그대로 받아 들일 수 있습니다.

인쇄하거나 보려는 모든 사용자 정의 클래스에 대해 to_s 또는 inspect 메소드를 작성하는 것을 잊지 마십시오. 이들은 대개 쓰기가 매우 간단하고 디버깅 할 때 매우 편리합니다.

+0

Tnks Tadman, TransactionHistory

0

감사합니다.

tadman과 Ilya Vassilevsky (그리고 B. Seven)가 제공 한 정보를 기반으로 제 질문에 대한 답변을 드리겠습니다.

1- 클래스와 개체를 만드는 것이 좋습니다. 내 코드를 구성하고 디버깅하는 데 도움이 될 것입니다. 누가 누구인지 지역화하고 무엇을하고 있는지. 또한 DB와 함께 사용하는 것이 좋습니다.

2- 나는 솔루션을 이해 한 후 내 질문에 약간의 수치심을 갖고 있습니다. 생각보다 훨씬 간단합니다. 그냥 두 단계가 필요했습니다 :

willpay = ciel3.dividends.find_all {|dividend| Date.parse(dividend.last_day_with) > Date.parse('10/09/2015')} 

willpay.each do |dividend| 
puts "#{ciel3.code} has approved #{dividend.type} on #{dividend.approved} and will pay by #{dividend.payment_day} the value of #{dividend.value.format} per share, for those that had the asset on #{dividend.last_day_with}" 
puts 
end