Ruby 初心者スレッド Part 67 (729レス)
1-

56: (ワッチョイ 7f2c-8PYP) 2021/01/25(月)17:06 ID:+q31tGtg0(1) AAS
黒魔術・メタプログラミングで、よく見る

インスタンス変数用のinstance_variables、
クラス/モジュールには、クラス変数(@@these_things)用のclass_variables
57: (ワッチョイ 5f01-oRbG) 2021/01/25(月)18:43 ID:co/Rkwpa0(1/2) AAS
>>54
そういう用途はStruct使うといいんでない?

Foo = Struct.new("Foo", :name, :id, :data1, :data2)
foo = Foo.new("foo", 1, "123", "456")
foo.to_h.keys
#=> [:name, :id, :data1, :data2]
foo.to_h.keys.to_csv
#=> "name,id,data1,data2¥n"
58: (ワッチョイ 5f01-oRbG) 2021/01/25(月)18:47 ID:co/Rkwpa0(2/2) AAS
Structは初期化時の引数の数が一致してなくてもエラーにならずにnilがデフォルト値になる
それがいやな場合は継承してコンストラクタを上書き

class Bar < Struct.new("Bar", :name, :id, :data1, :data2)
def initialize(name, id, data1=nil, data2=nil)
super
end
end
59
(2): (バットンキン MM7a-HhZe) 2021/01/29(金)04:39 ID:sK+sAxFfM(1/3) AAS
質問させてください。
以下のようなデータがあるとして。

data = {
"id": "price_xxxxxxx",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1234567,
"currency": "usd",
"metadata": {
省5
60: (バットンキン MM7a-HhZe) 2021/01/29(金)04:40 ID:sK+sAxFfM(2/3) AAS
>>59
すいません、4じゃなくて2でした。。
61
(1): (ワッチョイ 2a01-I+PI) 2021/01/29(金)13:59 ID:IOP7xwlv0(1) AAS
普通にブラケットでアクセスするかdigしたほうがいい気がするが
どうしてもドットでアクセスしたいなら再帰的にOpenStructに変換する

data = JSON.parse(data.to_json, object_class: OpenStruct)
data.metadata.commission
#=> "2"
62
(1): (ワッチョイ 662c-CS/l) 2021/01/29(金)14:31 ID:MVM9RsSY0(1) AAS
ハッシュだから、hash.x.xyz は無理だろ

Effective Ruby の項目10 に書いてある、
構造物はハッシュじゃなくて、クラス・Struct を使おうというやつだろ

ただ、その都度、構造が変わるものは、ハッシュの方が良いし、
構造がネストしている場合も難しい

require "json"

json = <<'JSON'
{ "a": "abc",
"x": {
"xyz": "2" }}
省3
63: (バットンキン MM7a-HhZe) 2021/01/29(金)14:57 ID:sK+sAxFfM(3/3) AAS
>>61 >>62

ありがとうございます。
背景を書いてませんでしたが、rspec で必要なデータなのです。。
後出しですいません。
なので data.metadata.commission で確認できることが必要なので、Struct(もしくはOpenStruct)で、変換させてみます。
64: (オッペケ Srbd-+Ul7) 2021/01/29(金)21:09 ID:/bfQuQp2r(1) AAS
>>59

def hoge!(obj)
  return unless Hash === obj
  def obj.method_missing(name, *_) = self[name]
  obj.each_value{Hash === _1 && hoge!(_1)}
end

hoge!(data)
p data.metadata.commission # => "2"

# 冗談だけど
65: (ワッチョイ 6a06-fCoL) 2021/02/03(水)22:28 ID:S1/u+juE0(1) AAS
>>54です。
アドバイスありがとうございます。

私も色々と調べたのですが、オブジェクトを1回作らないと難しいかもしれませんね。
仮にデータが全くなかった場合、csvのヘッダーのみ記述されたcsvファイルを出力したいと考えています。
しかし、データが全くないと、オブジェクトが無いため、オブジェクトからプロパティを取得する方法が使えません。
もちろん、ダミーのオブジェクトを作ればOKですが、少々不自然かと思いました。

Structは知らなかったので、勉強させていただきます。

ありがとうございました。
66: (ワッチョイ 2a01-I+PI) 2021/02/03(水)23:01 ID:q3Uucr840(1) AAS
Struct.membersでいいんじゃないの?
67: (アウアウウー Sa9b-EKhR) 2021/02/07(日)21:57 ID:RWoPy8BIa(1) AAS
Twitterリンク:yukihiro_matz
> 世界一周クルーズの広告が表示され、妻と「コロナ収まったら行きたいね」
世界一周は最低500万、上は数千万にもなる。
うっかり金持ち自慢をしてしまう…
Twitterリンク:5chan_nel (5ch newer account)
68
(1): (ワッチョイ 9286-yOCM) 2021/02/12(金)15:35 ID:Ru8WMsS80(1) AAS
インストールしなくていい機能縮小版rubyを作って、awkを代替えできるようにする
というのはどうでしょう
69: (ワッチョイ 8333-cxxd) 2021/02/12(金)19:50 ID:74skEOdG0(1) AAS
>>68
そんな用途なら、互換性が期待できないRubyよりも、信頼できるPerlのほうがええやろ。
70: (ワッチョイ cbb3-8Wj8) 2021/02/15(月)00:33 ID:KKKRaaGF0(1/2) AAS
すまん唐突だけど質問させて eql口頭でってなんで読んだら良いの?
71: (ワッチョイ cbb3-8Wj8) 2021/02/15(月)00:34 ID:KKKRaaGF0(2/2) AAS
ミスった
eqlって口頭では何て発音したら良いの? です
72
(1): (オッペケ Src7-JgCO) 2021/02/15(月)11:38 ID:adP2s3N/r(1) AAS
イコールって読んでる
equal?とeql?が入り乱れて使われてるところはしらんが。
まぁrubyしてるならequalとeql両方知ってるはずだし短いイコールの方、とかでも伝わるんじゃ
73
(1): (アウアウウー Sac3-/q7V) 2021/02/15(月)13:06 ID:2czEo7/ia(1) AAS
イーキュー
イーキューエル
イコール
74
(1): (オッペケ Src7-gtE8) 2021/02/15(月)21:15 ID:oDLt9usUr(1) AAS
イークワル
75: (ワッチョイ cbb3-8Wj8) 2021/02/16(火)21:32 ID:fxt1OOtg0(1/4) AAS
>>72
rubyやり始めたところで、eqlがイコールって気づかなかった。短い方のイコールって良いですね!ありがとうございます。
>>73
自分もイーキューエルだて頭の中で読んでた
>>74
なんでやーーー!!
1-
あと 654 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.012s