プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 66
https://mevius.5ch.net/test/read.cgi/tech/1578068134/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
Ruby 初心者スレッド Part 67
1デフォルトの名無しさん (ワッチョイ b72c-yePO)
2020/12/25(金) 04:24:27.68ID:aa9Khe9z06デフォルトの名無しさん (ワッチョイ 0bab-JtRj)
2020/12/25(金) 22:20:13.76ID:DVzhLIY40 形態素ゲイムRuby松本まじコスロ
by猪瀬色彩空間
by猪瀬色彩空間
7デフォルトの名無しさん (ワッチョイ 3be6-91uD)
2020/12/25(金) 22:53:56.79ID:gC1vp0cV0 速度3倍ってマジ?
8デフォルトの名無しさん (オッペケ Srd9-Isz2)
2020/12/26(土) 05:22:31.21ID:MLavBbcpr >>1乙
3.0おめでとう
3.0おめでとう
9デフォルトの名無しさん (アウアウウー Sa71-ZH8k)
2020/12/27(日) 22:23:18.64ID:3h7fei6ma $ gem install clipboard
$ irb
irb> require 'clipboard'
=> true
irb> puts Clipboard.paste
朝鮮・韓国兵の扱い方(取り扱いマニュアル) 旧日本陸軍・米軍・旧ソ連共産党 | memo
=> nil
$ irb
irb> require 'clipboard'
=> true
irb> puts Clipboard.paste
朝鮮・韓国兵の扱い方(取り扱いマニュアル) 旧日本陸軍・米軍・旧ソ連共産党 | memo
=> nil
10デフォルトの名無しさん (ワッチョイ 9bad-yePO)
2020/12/28(月) 21:08:07.24ID:JL6YsW3y0 Rubyってトップレベル関数はprivateにできないの?
やっぱり、Pythonみたいに__ってしてあげるしかないのかな
やっぱり、Pythonみたいに__ってしてあげるしかないのかな
11デフォルトの名無しさん (ワッチョイ 8f5f-yePO)
2020/12/29(火) 11:46:48.14ID:NZwVboWN0 2.7で作ったアプリを3.0で動かしてみたらエラーでした
12デフォルトの名無しさん (ワッチョイ 2e63-YHUb)
2021/01/02(土) 17:25:59.70ID:z1ZKe1zV0 rubyで自分用のCUIアプリを作成しています。質問させて下さい。
rubyではクラスごとにファイルを分けるべきでしょうか?
名前空間ごとにディレクトリを作成すべきでしょうか?
また、とりあえず他のソースコードを何個か見て、以下のディレクトリを作成しています。
bin/
lib/
binの中はコマンドライン解析用のソースコードのみで、他はlibの中に全部入っています。
この配置は一般的でしょうか?
また、テスト用のソースコードやデータはどのように配置すべきでしょうか?
私の作っているソフトウェアの規模は個人用なので小規模で2万行程度です。ただし、最終的にはこの倍はいきそうです。
しかしながら、勉強も兼ねて、なるべくrubyのお作法に従うようにしたいです。
よろしくお願いいたします。
rubyではクラスごとにファイルを分けるべきでしょうか?
名前空間ごとにディレクトリを作成すべきでしょうか?
また、とりあえず他のソースコードを何個か見て、以下のディレクトリを作成しています。
bin/
lib/
binの中はコマンドライン解析用のソースコードのみで、他はlibの中に全部入っています。
この配置は一般的でしょうか?
また、テスト用のソースコードやデータはどのように配置すべきでしょうか?
私の作っているソフトウェアの規模は個人用なので小規模で2万行程度です。ただし、最終的にはこの倍はいきそうです。
しかしながら、勉強も兼ねて、なるべくrubyのお作法に従うようにしたいです。
よろしくお願いいたします。
13(u_・y) (アウアウウー Saa5-Jh9r)
2021/01/04(月) 11:01:26.70ID:oZidFLopa 俺様なら作法とか無視して最低3フォルダは作るけど
0、bin
1、そのアプリのみで使う事が想定されてるファイル群
2、他のアプリでもそのまま使える完全に分離してるmodule/class群
どうしても一般論でやるってところに拘るならrubyコミッターのソースコード探して見てくれば良い
標準があるとすればそれ
0、bin
1、そのアプリのみで使う事が想定されてるファイル群
2、他のアプリでもそのまま使える完全に分離してるmodule/class群
どうしても一般論でやるってところに拘るならrubyコミッターのソースコード探して見てくれば良い
標準があるとすればそれ
14(u_・y) (アウアウウー Saa5-Jh9r)
2021/01/04(月) 11:24:34.37ID:oZidFLopa (u_・y) 質問です。世の中を自分の好きなように動かしたいのですが。
(u_・y) "rubyを使う"という条件に限定した場合、何をするのが最適解でしょうか?
(u_・y) "rubyを使う"という条件に限定した場合、何をするのが最適解でしょうか?
15デフォルトの名無しさん (ワッチョイ 8201-TJkF)
2021/01/04(月) 13:08:51.30ID:VbZo6FxW0 >>12
gemの構成に従うのが一般的
$ bundle gem <project_name> でscaffoldしてくれる
もう少し詳しく知りたければオライリーから出てる
「Build Awesome Command-Line Application in Ruby 2」の9章
gemの構成に従うのが一般的
$ bundle gem <project_name> でscaffoldしてくれる
もう少し詳しく知りたければオライリーから出てる
「Build Awesome Command-Line Application in Ruby 2」の9章
16デフォルトの名無しさん (ワッチョイ 2e2c-qBFf)
2021/01/04(月) 13:22:27.53ID:yec7Hk1C0 Rails のプロジェクト構成に従えば?
プロジェクトルート直下のフォルダは、
ruby -e 'puts Dir.glob( "*" ).select{ |file| File.directory? file }.sort.join( ", " )'
app, bin, config, db, lib, log, node_modules, public, storage, test, tmp, vendor
プロジェクトルート直下のフォルダは、
ruby -e 'puts Dir.glob( "*" ).select{ |file| File.directory? file }.sort.join( ", " )'
app, bin, config, db, lib, log, node_modules, public, storage, test, tmp, vendor
17(u_・y) (アウアウウー Saa5-Jh9r)
2021/01/04(月) 20:10:47.67ID:0ES7puYLa 問 1
以下のソースコードを実行したときに最終的に表示される文字列をこたえよ
※ まずは答えを見ずに考えてね!
def b x
x + " rails"
end
def f(x=<<-TEXT) return p b x ; python最高(*'▽')
on #{print "ruby "}
TEXT
end
f
答え: https://ideone.com/G9U1Ab
以下のソースコードを実行したときに最終的に表示される文字列をこたえよ
※ まずは答えを見ずに考えてね!
def b x
x + " rails"
end
def f(x=<<-TEXT) return p b x ; python最高(*'▽')
on #{print "ruby "}
TEXT
end
f
答え: https://ideone.com/G9U1Ab
18デフォルトの名無しさん (ワッチョイ 2e63-YHUb)
2021/01/04(月) 21:25:31.68ID:yms/N9cK0 ありがとうございます。
いただいた回答を確認させていただきましたが、bundle2.7 gem NAMEで出てくる内容が、私の知りたい回答に近いようです。
参考にさせていただきます。
いただいた回答を確認させていただきましたが、bundle2.7 gem NAMEで出てくる内容が、私の知りたい回答に近いようです。
参考にさせていただきます。
19デフォルトの名無しさん (ワッチョイ 468c-1BNf)
2021/01/05(火) 19:10:35.24ID:khtEPZ8Z0 CSVファイルの読み込みで下みたいに変換することってできる?
"0123",1
=> ["0123", 1]
"0123",1
=> ["0123", 1]
20デフォルトの名無しさん (オッペケ Srf1-hZl1)
2021/01/05(火) 19:30:04.21ID:MfDAyFl4r >>19
CSV.parse '"0123",1', quote_char: ?' #=> [["\"0123\"", "1"]]
CSV.parse '"0123",1', quote_char: ?' #=> [["\"0123\"", "1"]]
21デフォルトの名無しさん (ワッチョイ 2e2c-qBFf)
2021/01/06(水) 00:17:02.38ID:2hpPqzu40 CSV では文字列・数値とか、各列の型を指定できなかったっけ?
各列の変換器
各列の変換器
22デフォルトの名無しさん (ワッチョイ 8205-I5PR)
2021/01/06(水) 02:45:29.91ID:X+T/DkCZ0 プログラミング自体初心者です
ファイバーを全く理解していなかったので勉強してみているのですが
class Test
def initialize
@fiber = Fiber.new {test}
end
def test
p "これがファイバーのブロックで与えた処理だ"
Fiber.yield
p "理解したかな???"
end
def fiber_test(count = 60)
@fiber.resume
p "帰ってきたぞ"
@fiber.resume
p "再び帰ってきたぞ"
count.times do {Fiber.yield}
end
end
このコードを組んで別の場所でTest.new.fiber_testとインスタンスを作成して呼び出してみたのですが
@fiber.resumeでtestメソッドへ移動し
Fiber_yieldでfiber_testメソッドへ戻ることはわかったのですが
testメソッドで@fiber.resumeを実行すると親子関係がおかしくなるからかFiberErrorを起こすのに対し
fiber_testメソッド側でFiber_yieldを実行すると一瞬画面が止まるだけでコンソールにも何も表示されません
これは何が起きているのでしょうか?
引数のcountを増やすほど長く画面が固まります
ファイバーを全く理解していなかったので勉強してみているのですが
class Test
def initialize
@fiber = Fiber.new {test}
end
def test
p "これがファイバーのブロックで与えた処理だ"
Fiber.yield
p "理解したかな???"
end
def fiber_test(count = 60)
@fiber.resume
p "帰ってきたぞ"
@fiber.resume
p "再び帰ってきたぞ"
count.times do {Fiber.yield}
end
end
このコードを組んで別の場所でTest.new.fiber_testとインスタンスを作成して呼び出してみたのですが
@fiber.resumeでtestメソッドへ移動し
Fiber_yieldでfiber_testメソッドへ戻ることはわかったのですが
testメソッドで@fiber.resumeを実行すると親子関係がおかしくなるからかFiberErrorを起こすのに対し
fiber_testメソッド側でFiber_yieldを実行すると一瞬画面が止まるだけでコンソールにも何も表示されません
これは何が起きているのでしょうか?
引数のcountを増やすほど長く画面が固まります
23デフォルトの名無しさん (オッペケ Srf1-hZl1)
2021/01/06(水) 05:27:15.07ID:jWwxeiIUr24デフォルトの名無しさん (ワッチョイ 2e2c-qBFf)
2021/01/06(水) 06:10:07.47ID:2hpPqzu40 Fiber は、coroutine みたいなものか
初心者がやるものじゃない。
10年以上やってから、やるもの
初心者がやるものじゃない。
10年以上やってから、やるもの
25デフォルトの名無しさん (ワッチョイ 2e2c-qBFf)
2021/01/06(水) 06:33:24.80ID:2hpPqzu40 f = Fiber.new do
n = 0
loop do
puts "子の前 : #{ n }"
Fiber.yield( n ) # 親へ
puts "子の後 : #{ n }"
n += 1
end
end
2.times do |idx|
puts "親の前 : #{ idx }"
puts "親の値 : #{ f.resume }" # 子へ
puts "親の後 : #{ idx }"
end
出力
親の前 : 0
子の前 : 0
親の値 : 0
親の後 : 0
親の前 : 1
子の後 : 0 # 要注意!
子の前 : 1
親の値 : 1
親の後 : 1
n = 0
loop do
puts "子の前 : #{ n }"
Fiber.yield( n ) # 親へ
puts "子の後 : #{ n }"
n += 1
end
end
2.times do |idx|
puts "親の前 : #{ idx }"
puts "親の値 : #{ f.resume }" # 子へ
puts "親の後 : #{ idx }"
end
出力
親の前 : 0
子の前 : 0
親の値 : 0
親の後 : 0
親の前 : 1
子の後 : 0 # 要注意!
子の前 : 1
親の値 : 1
親の後 : 1
26デフォルトの名無しさん (ブーイモ MMb6-zmFY)
2021/01/06(水) 11:25:26.71ID:HlI/jGZrM >>22
そのコードはfiber_testメソッドのFiber_yieldしてるところで
can't yield from root fiberのエラーになるよ
エラーにならないならrubyのバージョンと再現可能なコードを書いて
そのコードはfiber_testメソッドのFiber_yieldしてるところで
can't yield from root fiberのエラーになるよ
エラーにならないならrubyのバージョンと再現可能なコードを書いて
27(u_・y) (アウアウウー Saa5-Jh9r)
2021/01/06(水) 12:45:06.84ID:I0SDZM+6a Fiber.yield と @var.resume で処理の投げあいをしてるだけ
で、resumeは変数のメソッドだから変数が参照できればどこからでも呼べるが、
Fiber.yieldっていうのは、Fiber.new{ ここ }の中でしか呼び出せない
なお初心者がFiberを使ったコードを書いても普通にloopで書いたほうがいいもんを煩雑にさせるだけだから今覚えてもすぐ明日から使うぞーってなる機能ではない
で、resumeは変数のメソッドだから変数が参照できればどこからでも呼べるが、
Fiber.yieldっていうのは、Fiber.new{ ここ }の中でしか呼び出せない
なお初心者がFiberを使ったコードを書いても普通にloopで書いたほうがいいもんを煩雑にさせるだけだから今覚えてもすぐ明日から使うぞーってなる機能ではない
28デフォルトの名無しさん (ワッチョイ 42bb-zSX4)
2021/01/06(水) 14:48:29.93ID:eEkuR0nA0 Ruby使った事ない勢です
知人から恐らくruby(のgem ocra)でコンパイルされたexeファイルを修正してほしいと頼まれたのですが
これ逆アセンブルする方法無いですか?
知人から恐らくruby(のgem ocra)でコンパイルされたexeファイルを修正してほしいと頼まれたのですが
これ逆アセンブルする方法無いですか?
29デフォルトの名無しさん (ワッチョイ 8201-TJkF)
2021/01/06(水) 15:07:09.07ID:twxSQNJZ0 >>28
解凍すればいいだけでは?
解凍すればいいだけでは?
30デフォルトの名無しさん (スフッ Sd62-BgNG)
2021/01/06(水) 18:53:39.35ID:tXuutWqgd >>29
無知で申し訳ないです
サクラエディタでexeとか怪しいtmp開いてみたけど見られないんですよね
解凍というのはどう言うことでしょうか?ocraにそういったコマンドがあるのでしょうか?
それとも実はzipでコンパイルされてるとか?
無知で申し訳ないです
サクラエディタでexeとか怪しいtmp開いてみたけど見られないんですよね
解凍というのはどう言うことでしょうか?ocraにそういったコマンドがあるのでしょうか?
それとも実はzipでコンパイルされてるとか?
31デフォルトの名無しさん (ワッチョイ 8201-TJkF)
2021/01/06(水) 22:30:29.65ID:twxSQNJZ032デフォルトの名無しさん (オッペケ Srf1-hZl1)
2021/01/06(水) 22:35:40.93ID:jWwxeiIUr Ractorが今後どうなるか楽しみ
33デフォルトの名無しさん (ワッチョイ 42bb-zSX4)
2021/01/06(水) 23:02:25.85ID:eEkuR0nA0 >>31
出来ました、ありがとうございます
出来ました、ありがとうございます
34デフォルトの名無しさん (ワッチョイ 468c-1BNf)
2021/01/06(水) 23:28:49.12ID:D4I0bPT1035デフォルトの名無しさん (ワッチョイ 2e2c-qBFf)
2021/01/07(木) 00:57:12.57ID:ikfTGx5+0 0 で始まる数値は8進数だから、:numeric ではバグル
012 は、10 になる。
一方、09 は8進数では存在しないから、9 となる
require "csv"
text = <<'TEXT'
"09",1
"012",2
TEXT
csv = CSV.new( text )
csv.convert( :numeric )
p csv.read
#=> [ [9.0, 1], [10, 2] ]
012 は、10 になる。
一方、09 は8進数では存在しないから、9 となる
require "csv"
text = <<'TEXT'
"09",1
"012",2
TEXT
csv = CSV.new( text )
csv.convert( :numeric )
p csv.read
#=> [ [9.0, 1], [10, 2] ]
36(u_・y) (アウアウウー Saa5-Jh9r)
2021/01/07(木) 02:12:02.37ID:oTn3YI8va csv=<<-TXT
"01.23",1
"09",1
"012",2
TXT
a=csv.each_line.map{|n| eval"[#{n}]" }
p a
"01.23",1
"09",1
"012",2
TXT
a=csv.each_line.map{|n| eval"[#{n}]" }
p a
37デフォルトの名無しさん (ワッチョイ 468c-1BNf)
2021/01/07(木) 03:01:27.13ID:BvHUxMcb038デフォルトの名無しさん (ワッチョイ ed7f-hZl1)
2021/01/07(木) 06:30:45.65ID:yCgL5kYR0 後出しで条件付け加えてくるのやめろ
39デフォルトの名無しさん (ワッチョイ 9233-cbZ0)
2021/01/07(木) 09:59:32.37ID:d5tQYhLy0 つーか、あとは自分でできるやろ。
やりたいようにやれ。
やりたいようにやれ。
40デフォルトの名無しさん (ワッチョイ 468c-1BNf)
2021/01/07(木) 18:15:56.20ID:BvHUxMcb0 うむ。>>23で解決した
あとはお題として書いてみた
あとはお題として書いてみた
41(u_・y) (アウアウウー Saa5-Jh9r)
2021/01/07(木) 20:00:34.95ID:pRSWPdMla 友達いなそう
42デフォルトの名無しさん (ワッチョイ 5fda-Cbw0)
2021/01/11(月) 00:35:09.75ID:RMa4jLhx0 ruby初心者です。
調べたけどわからないので教えて下さい
neriでexeファイルを作ろうとすると、簡単なもので試したのですが、
internal:C:/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in
`require': cannot load such file -- Win32API (LoadError)
のエラーが出ます。
Windows 10
ruby 3.0 x64
Bat_To_Exe_Converter v3.2
調べたけどわからないので教えて下さい
neriでexeファイルを作ろうとすると、簡単なもので試したのですが、
internal:C:/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in
`require': cannot load such file -- Win32API (LoadError)
のエラーが出ます。
Windows 10
ruby 3.0 x64
Bat_To_Exe_Converter v3.2
43デフォルトの名無しさん (オッペケ Srb3-VpI/)
2021/01/11(月) 00:42:06.93ID:XvdCBu9Er >>42
gem list にWin32APIはあるのか?
gem list にWin32APIはあるのか?
44デフォルトの名無しさん (ササクッテロラ Spb3-eSWr)
2021/01/11(月) 09:03:37.19ID:LZqNfRTHp45デフォルトの名無しさん (ワッチョイ ff2c-9hkR)
2021/01/11(月) 11:30:06.64ID:RwOnRvzI0 「ruby `require': cannot load such file -- Win32API」で検索!
46デフォルトの名無しさん (アウアウウー Saa3-zMe3)
2021/01/11(月) 15:49:37.24ID:NK5j5E+la Win32APIはruby3.0から廃止
当然Win32APIを使ってたgemsはRuby3.0では作者がメンテナンスするまで動かないからneri作者の尻ひっぱたくか前のバージョン使え
当然Win32APIを使ってたgemsはRuby3.0では作者がメンテナンスするまで動かないからneri作者の尻ひっぱたくか前のバージョン使え
47デフォルトの名無しさん (アメ MMe3-nOiR)
2021/01/11(月) 15:52:47.62ID:Yn+GwDZFM さすがの互換性w
48デフォルトの名無しさん (ワッチョイ df01-zMe3)
2021/01/11(月) 16:04:22.15ID:KSKcxhht0 Windowsに嫌われてるとか言ってたな。
49デフォルトの名無しさん (ワッチョイ ff68-Q/Jp)
2021/01/11(月) 21:15:58.19ID:iHOPiDVy050デフォルトの名無しさん (ササクッテロ Spb3-eSWr)
2021/01/11(月) 22:59:29.10ID:jE21Oyzwp51デフォルトの名無しさん (ワッチョイ e1da-A78j)
2021/01/21(木) 04:05:57.95ID:wRHR1dSL0 環境変数の設定を一切せず
rubyの起動オプションですべて明示するというやり方って
現実的になにかトラブルが発生したりしますか?
rubyの起動オプションですべて明示するというやり方って
現実的になにかトラブルが発生したりしますか?
52デフォルトの名無しさん (ワッチョイ ae68-8Eyn)
2021/01/21(木) 04:54:29.71ID:GWoeC7/l0 コマンドラインの長さとか?
最近ならもうだいじょうぶかな?
最近ならもうだいじょうぶかな?
53デフォルトの名無しさん (ワッチョイ 87da-Jq7D)
2021/01/22(金) 08:44:48.38ID:MPceXAls0 そんなに長い指定はないので今の所問題く動いているっぽいです
ありがとうございます
ありがとうございます
54デフォルトの名無しさん (ワッチョイ 5f06-jsk3)
2021/01/23(土) 12:19:40.78ID:joIGd+XG0 教えていただきたいのですが、rubyのclassでそのclassに存在するプロパティ一覧を取得する方法ありますか?
以下の様なクラスを作ってます。
class Data
def self.csv_header
return 'name,id,data1,data2'
end
attr_reader :name, :id, :data1, :data2
def initialize(name:, id:, data1:, data2)
@name = name
@id = id
@data1 = data1
@data2 = data2
end
def to_csv
return "#{@name},#{@id},#{@data1},#{@data2}"
end
end
要するに、何か複数のデータを持つクラスがあり、それをcsvとして出力したいです。
そのヘッダーを出力する機能をクラスメソッドとして持たせたいのですが、このクラスメソッド(csv_header)の中身を手で書くのではなく、javaで言う所のreflectionか何かを使って出力する方法はありますか?
よろしくお願いいたします
以下の様なクラスを作ってます。
class Data
def self.csv_header
return 'name,id,data1,data2'
end
attr_reader :name, :id, :data1, :data2
def initialize(name:, id:, data1:, data2)
@name = name
@id = id
@data1 = data1
@data2 = data2
end
def to_csv
return "#{@name},#{@id},#{@data1},#{@data2}"
end
end
要するに、何か複数のデータを持つクラスがあり、それをcsvとして出力したいです。
そのヘッダーを出力する機能をクラスメソッドとして持たせたいのですが、このクラスメソッド(csv_header)の中身を手で書くのではなく、javaで言う所のreflectionか何かを使って出力する方法はありますか?
よろしくお願いいたします
55デフォルトの名無しさん (オッペケ Sr7b-3C30)
2021/01/24(日) 22:13:50.30ID:kU4Polklr >>54
hoge = Data.new('name', id: 0, data1: 1, data2: 2)
ivs = hoge.instance_variables
ivs.each{|iv| puts "%s => %p" % [iv, hoge.instance_variable_get(iv)]}
# =>
name => "name"
id => 0
data1 => 1
data2 => 2
hoge = Data.new('name', id: 0, data1: 1, data2: 2)
ivs = hoge.instance_variables
ivs.each{|iv| puts "%s => %p" % [iv, hoge.instance_variable_get(iv)]}
# =>
name => "name"
id => 0
data1 => 1
data2 => 2
56デフォルトの名無しさん (ワッチョイ 7f2c-8PYP)
2021/01/25(月) 17:06:01.79ID:+q31tGtg0 黒魔術・メタプログラミングで、よく見る
インスタンス変数用のinstance_variables、
クラス/モジュールには、クラス変数(@@these_things)用のclass_variables
インスタンス変数用のinstance_variables、
クラス/モジュールには、クラス変数(@@these_things)用のclass_variables
57デフォルトの名無しさん (ワッチョイ 5f01-oRbG)
2021/01/25(月) 18:43:13.07ID:co/Rkwpa0 >>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"
そういう用途は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:31.66ID:co/Rkwpa0 Structは初期化時の引数の数が一致してなくてもエラーにならずにnilがデフォルト値になる
それがいやな場合は継承してコンストラクタを上書き
class Bar < Struct.new("Bar", :name, :id, :data1, :data2)
def initialize(name, id, data1=nil, data2=nil)
super
end
end
それがいやな場合は継承してコンストラクタを上書き
class Bar < Struct.new("Bar", :name, :id, :data1, :data2)
def initialize(name, id, data1=nil, data2=nil)
super
end
end
59デフォルトの名無しさん (バットンキン MM7a-HhZe)
2021/01/29(金) 04:39:32.60ID:sK+sAxFfM 質問させてください。
以下のようなデータがあるとして。
data = {
"id": "price_xxxxxxx",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1234567,
"currency": "usd",
"metadata": {
"commission": "2"
}
}
このデータを p data.metadata.commission とすると4が表示されるようにしたいです。
どうやって変換すればいいでしょうか?
以下のようなデータがあるとして。
data = {
"id": "price_xxxxxxx",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1234567,
"currency": "usd",
"metadata": {
"commission": "2"
}
}
このデータを p data.metadata.commission とすると4が表示されるようにしたいです。
どうやって変換すればいいでしょうか?
60デフォルトの名無しさん (バットンキン MM7a-HhZe)
2021/01/29(金) 04:40:41.40ID:sK+sAxFfM >>59
すいません、4じゃなくて2でした。。
すいません、4じゃなくて2でした。。
61デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
2021/01/29(金) 13:59:12.19ID:IOP7xwlv0 普通にブラケットでアクセスするかdigしたほうがいい気がするが
どうしてもドットでアクセスしたいなら再帰的にOpenStructに変換する
data = JSON.parse(data.to_json, object_class: OpenStruct)
data.metadata.commission
#=> "2"
どうしてもドットでアクセスしたいなら再帰的にOpenStructに変換する
data = JSON.parse(data.to_json, object_class: OpenStruct)
data.metadata.commission
#=> "2"
62デフォルトの名無しさん (ワッチョイ 662c-CS/l)
2021/01/29(金) 14:31:44.23ID:MVM9RsSY0 ハッシュだから、hash.x.xyz は無理だろ
Effective Ruby の項目10 に書いてある、
構造物はハッシュじゃなくて、クラス・Struct を使おうというやつだろ
ただ、その都度、構造が変わるものは、ハッシュの方が良いし、
構造がネストしている場合も難しい
require "json"
json = <<'JSON'
{ "a": "abc",
"x": {
"xyz": "2" }}
JSON
p hash = JSON.parse( json ) #=> {"a"=>"abc", "x"=>{"xyz"=>"2"}}
p hash[ "x" ][ "xyz" ] #=> 2
Effective Ruby の項目10 に書いてある、
構造物はハッシュじゃなくて、クラス・Struct を使おうというやつだろ
ただ、その都度、構造が変わるものは、ハッシュの方が良いし、
構造がネストしている場合も難しい
require "json"
json = <<'JSON'
{ "a": "abc",
"x": {
"xyz": "2" }}
JSON
p hash = JSON.parse( json ) #=> {"a"=>"abc", "x"=>{"xyz"=>"2"}}
p hash[ "x" ][ "xyz" ] #=> 2
63デフォルトの名無しさん (バットンキン MM7a-HhZe)
2021/01/29(金) 14:57:50.28ID:sK+sAxFfM64デフォルトの名無しさん (オッペケ Srbd-+Ul7)
2021/01/29(金) 21:09:33.54ID:/bfQuQp2r >>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"
# 冗談だけど
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:17.16ID:S1/u+juE0 >>54です。
アドバイスありがとうございます。
私も色々と調べたのですが、オブジェクトを1回作らないと難しいかもしれませんね。
仮にデータが全くなかった場合、csvのヘッダーのみ記述されたcsvファイルを出力したいと考えています。
しかし、データが全くないと、オブジェクトが無いため、オブジェクトからプロパティを取得する方法が使えません。
もちろん、ダミーのオブジェクトを作ればOKですが、少々不自然かと思いました。
Structは知らなかったので、勉強させていただきます。
ありがとうございました。
アドバイスありがとうございます。
私も色々と調べたのですが、オブジェクトを1回作らないと難しいかもしれませんね。
仮にデータが全くなかった場合、csvのヘッダーのみ記述されたcsvファイルを出力したいと考えています。
しかし、データが全くないと、オブジェクトが無いため、オブジェクトからプロパティを取得する方法が使えません。
もちろん、ダミーのオブジェクトを作ればOKですが、少々不自然かと思いました。
Structは知らなかったので、勉強させていただきます。
ありがとうございました。
66デフォルトの名無しさん (ワッチョイ 2a01-I+PI)
2021/02/03(水) 23:01:53.55ID:q3Uucr840 Struct.membersでいいんじゃないの?
67デフォルトの名無しさん (アウアウウー Sa9b-EKhR)
2021/02/07(日) 21:57:18.80ID:RWoPy8BIa https://twitter.com/yukihiro_matz/status/1358048924141973504?s=20
> 世界一周クルーズの広告が表示され、妻と「コロナ収まったら行きたいね」
世界一周は最低500万、上は数千万にもなる。
うっかり金持ち自慢をしてしまう…
https://twitter.com/5chan_nel (5ch newer account)
> 世界一周クルーズの広告が表示され、妻と「コロナ収まったら行きたいね」
世界一周は最低500万、上は数千万にもなる。
うっかり金持ち自慢をしてしまう…
https://twitter.com/5chan_nel (5ch newer account)
68デフォルトの名無しさん (ワッチョイ 9286-yOCM)
2021/02/12(金) 15:35:22.83ID:Ru8WMsS80 インストールしなくていい機能縮小版rubyを作って、awkを代替えできるようにする
というのはどうでしょう
というのはどうでしょう
69デフォルトの名無しさん (ワッチョイ 8333-cxxd)
2021/02/12(金) 19:50:07.01ID:74skEOdG0 >>68
そんな用途なら、互換性が期待できないRubyよりも、信頼できるPerlのほうがええやろ。
そんな用途なら、互換性が期待できないRubyよりも、信頼できるPerlのほうがええやろ。
70デフォルトの名無しさん (ワッチョイ cbb3-8Wj8)
2021/02/15(月) 00:33:16.20ID:KKKRaaGF0 すまん唐突だけど質問させて eql口頭でってなんで読んだら良いの?
71デフォルトの名無しさん (ワッチョイ cbb3-8Wj8)
2021/02/15(月) 00:34:14.29ID:KKKRaaGF0 ミスった
eqlって口頭では何て発音したら良いの? です
eqlって口頭では何て発音したら良いの? です
72デフォルトの名無しさん (オッペケ Src7-JgCO)
2021/02/15(月) 11:38:51.60ID:adP2s3N/r イコールって読んでる
equal?とeql?が入り乱れて使われてるところはしらんが。
まぁrubyしてるならequalとeql両方知ってるはずだし短いイコールの方、とかでも伝わるんじゃ
equal?とeql?が入り乱れて使われてるところはしらんが。
まぁrubyしてるならequalとeql両方知ってるはずだし短いイコールの方、とかでも伝わるんじゃ
73デフォルトの名無しさん (アウアウウー Sac3-/q7V)
2021/02/15(月) 13:06:36.01ID:2czEo7/ia イーキュー
イーキューエル
イコール
イーキューエル
イコール
74デフォルトの名無しさん (オッペケ Src7-gtE8)
2021/02/15(月) 21:15:47.96ID:oDLt9usUr イークワル
75デフォルトの名無しさん (ワッチョイ cbb3-8Wj8)
2021/02/16(火) 21:32:31.57ID:fxt1OOtg076デフォルトの名無しさん (ワッチョイ cbb3-pcjv)
2021/02/16(火) 22:13:45.11ID:fxt1OOtg0 すみません、質問です
hash生成時に、
str={"key1" = "val1"}
ではエラーになる理由を教えてください。
hash生成時に、
str={"key1" = "val1"}
ではエラーになる理由を教えてください。
77デフォルトの名無しさん (ワッチョイ 162c-FDiY)
2021/02/16(火) 22:25:37.65ID:F9q4wvox0 p hash = { "a" => "b" } #=> {"a"=>"b"}
全角の{}を使うな。
文字列以外は半角英数字のみ
全角の{}を使うな。
文字列以外は半角英数字のみ
78デフォルトの名無しさん (ワッチョイ cbb3-pcjv)
2021/02/16(火) 22:28:16.05ID:fxt1OOtg0 >>77
すみません、携帯からで全角と半角を間違えてしまいました。半角として見てくださいm(_ _)m
すみません、携帯からで全角と半角を間違えてしまいました。半角として見てくださいm(_ _)m
7977 (ワッチョイ 162c-FDiY)
2021/02/16(火) 23:01:49.84ID:F9q4wvox0 p h_1 = { "a" => "b" } #=> {"a"=>"b"}
p h_2 = { "あ": "い" } #=> {:あ=>"い"}
p h_3 = { one: 1, "two": "2" } #=> {:one=>1, :two=>"2"}
新しめの書き方では、2, 3 みたいに書ける
: を使うと、文字列のキーがシンボルになる
"two": が、:two になる
one: はシンボルのまま
p h_2 = { "あ": "い" } #=> {:あ=>"い"}
p h_3 = { one: 1, "two": "2" } #=> {:one=>1, :two=>"2"}
新しめの書き方では、2, 3 みたいに書ける
: を使うと、文字列のキーがシンボルになる
"two": が、:two になる
one: はシンボルのまま
80デフォルトの名無しさん (ワッチョイ cbb3-pcjv)
2021/02/16(火) 23:13:47.99ID:fxt1OOtg0 書いていただいた方法でないと生成できないのですね
丁寧な回答ありがとうございました
丁寧な回答ありがとうございました
81デフォルトの名無しさん (ワッチョイ 8333-cxxd)
2021/02/17(水) 00:25:13.96ID:p6fAds/B0 つーか、なんで「=」でいいと思ったんだか。w
82デフォルトの名無しさん (ワッチョイ bf2d-A6sh)
2021/02/20(土) 02:27:26.66ID:SWSWE4Ss0 AtCoderの解答見てると、rubyで巨大配列を扱うような時に激遅になりがちな気がする
配列アクセスの遅さなのかループの遅さなのかわからんが
配列アクセスの遅さなのかループの遅さなのかわからんが
83デフォルトの名無しさん (ワッチョイ cf2c-qRZF)
2021/02/20(土) 05:46:26.76ID:CT8193ch0 JIT があるから、1秒間で100万回ループすると、ネイティブコードにコンパイルされて、
1秒間で1,000万回ループできるようになる
1秒間で1,000万回ループできるようになる
84デフォルトの名無しさん (ワントンキン MMa7-bvMg)
2021/02/23(火) 21:47:53.55ID:QIohwxjcM irbにおいて、
def test; p test; end
とだけ打ち込みました。
すると、Enumerable.methods.grep(/test/) => [:test]
が得られます。
何故、testメソッドが勝手にEnumerableのメソッドになるのか教えていただけないでしょうか。
環境は
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18]
です。
def test; p test; end
とだけ打ち込みました。
すると、Enumerable.methods.grep(/test/) => [:test]
が得られます。
何故、testメソッドが勝手にEnumerableのメソッドになるのか教えていただけないでしょうか。
環境は
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18]
です。
85デフォルトの名無しさん (オッペケ Sr07-VXi+)
2021/02/23(火) 22:02:57.19ID:IEGWDKD5r https://docs.ruby-lang.org/ja/latest/class/main.html
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。
って思ったけどこっちの環境でもprivateにならないな
はて、何故でしょう
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。
って思ったけどこっちの環境でもprivateにならないな
はて、何故でしょう
86デフォルトの名無しさん (ワッチョイ 6f8c-WTU+)
2021/02/24(水) 02:17:06.53ID:hlmSDKs+0 バグじゃね?
87デフォルトの名無しさん (ワッチョイ cf2c-QclQ)
2021/02/24(水) 02:20:59.00ID:YN61hHjA0 ruby 2.6.6 [x86_64-linux] なら、
def test; p test; end
p Enumerable.methods.grep(/test/) #=> [ ]
def test; p test; end
p Enumerable.methods.grep(/test/) #=> [ ]
8887 (ワッチョイ cf2c-QclQ)
2021/02/24(水) 02:26:45.21ID:YN61hHjA0 p test が文法エラーになるのでは?
test という識別子が存在しないから
test という識別子が存在しないから
89デフォルトの名無しさん (ササクッテロラ Sp07-GD1z)
2021/02/24(水) 07:33:53.13ID:UUqFv7Fhp 0084です。
def test; p test; end
ではなく、
def test; p “test”; end
でした。
大変申し訳ありませんでした。
ほかのメソッドでも同じような動きを確認しています。今日は立て込んでしまっているので、追って別のメソッドの例も提示します。
def test; p test; end
ではなく、
def test; p “test”; end
でした。
大変申し訳ありませんでした。
ほかのメソッドでも同じような動きを確認しています。今日は立て込んでしまっているので、追って別のメソッドの例も提示します。
90デフォルトの名無しさん (ササクッテロラ Sp07-GD1z)
2021/02/24(水) 07:38:08.91ID:UUqFv7Fhp >>0085さん、確認ありがとうございます。
私は初心者なので、以下の認識で正しいか、何か例外があるのか不安でお尋ねしました。認識は正しかったようですので、もう少し調べてみます。
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。
私は初心者なので、以下の認識で正しいか、何か例外があるのか不安でお尋ねしました。認識は正しかったようですので、もう少し調べてみます。
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。
91デフォルトの名無しさん (ブーイモ MMff-wfSA)
2021/02/24(水) 10:21:05.87ID:a7gl+o1qM privateかどうかをどうやって確認したの?
要再現コード
要再現コード
92デフォルトの名無しさん (ワッチョイ ff01-pEhb)
2021/02/24(水) 11:26:34.15ID:9gaCPeun0 環境を作り直したほうがよさそう
93デフォルトの名無しさん (ワッチョイ 6f8c-63U7)
2021/02/24(水) 12:25:28.67ID:hlmSDKs+0 ruby 2.6 => [ ]
ruby 2.7 => [:test]
ruby 3.0 => [ ]
ruby 2.7 => [:test]
ruby 3.0 => [ ]
94デフォルトの名無しさん (ワッチョイ 6f8c-63U7)
2021/02/24(水) 12:35:04.10ID:hlmSDKs+0 irb(main):001:0> def foo; p "Foo!" end
=> :foo
irb(main):002:0> "abc".foo
"Foo!"
=> "Foo!"
irb(main):003:0> 3.14.foo
"Foo!"
=> "Foo!"
irb(main):004:0> [].foo
"Foo!"
=> "Foo!"
=> :foo
irb(main):002:0> "abc".foo
"Foo!"
=> "Foo!"
irb(main):003:0> 3.14.foo
"Foo!"
=> "Foo!"
irb(main):004:0> [].foo
"Foo!"
=> "Foo!"
95デフォルトの名無しさん (ワントンキン MM9f-bvMg)
2021/02/24(水) 20:33:38.12ID:p2P+ZlS6M 90です。
パソコンを再起動して、.irb_historyをtouchで初期化したのち、
以下を実行しても同じ結果でした。
irb(main):001:0> def test; p "test"; end
=> :test
irb(main):002:0> Enumerable.methods.grep(/test/)
=> [:test]
irb(main):010:0> exit
$ rbenv -v
rbenv 1.1.2
$ rbenv versions
system
* 2.7.1 (set by /Users/someone/.rbenv/version)
別のメソッドも作ってみましたが、結果は同じでした。
irb(main):001:1* def mul(a,b)
irb(main):002:1* a*b
irb(main):003:0> end
=> :mul
irb(main):004:0> Enumerable.methods.grep(/mul/)
=> [:mul]
irb(main):006:0> exit
$ irb
irb(main):001:0> Enumerable.methods.grep(/mul/)
=> []
パソコンを再起動して、.irb_historyをtouchで初期化したのち、
以下を実行しても同じ結果でした。
irb(main):001:0> def test; p "test"; end
=> :test
irb(main):002:0> Enumerable.methods.grep(/test/)
=> [:test]
irb(main):010:0> exit
$ rbenv -v
rbenv 1.1.2
$ rbenv versions
system
* 2.7.1 (set by /Users/someone/.rbenv/version)
別のメソッドも作ってみましたが、結果は同じでした。
irb(main):001:1* def mul(a,b)
irb(main):002:1* a*b
irb(main):003:0> end
=> :mul
irb(main):004:0> Enumerable.methods.grep(/mul/)
=> [:mul]
irb(main):006:0> exit
$ irb
irb(main):001:0> Enumerable.methods.grep(/mul/)
=> []
96デフォルトの名無しさん (ワントンキン MM9f-bvMg)
2021/02/24(水) 20:38:46.87ID:p2P+ZlS6M 90です。
92さんがおっしゃる通り、環境を作り直すこととします。
私の疑問を受けて、再現性について試していただいた皆様、
ご協力ありがとうございました。
92さんがおっしゃる通り、環境を作り直すこととします。
私の疑問を受けて、再現性について試していただいた皆様、
ご協力ありがとうございました。
97デフォルトの名無しさん (オッペケ Sr07-VXi+)
2021/02/24(水) 20:41:24.99ID:MS8741jMr irb(とpry)でトップレベルで定義するとなんかおかしい
$ cat test.rb
def hoge; end
puts 'public: %p' % [methods.grep(/hoge/)]
puts 'private: %p' % [private_methods.grep(/hoge/)]
$ ruby -v test.rb
ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32]
public: []
private: [:hoge]
$ irb
irb(main):001:0> load("test.rb")
public: []
private: [:hoge]
=> true
irb(main):002:0> def fuga;end
=> :fuga
irb(main):003:0> puts 'public: %p' % [methods.grep(/fuga/)]
public: [:fuga]
=> nil
irb(main):004:0> puts 'private: %p' % [private_methods.grep(/fuga/)]
private: []
=> nil
$ cat test.rb
def hoge; end
puts 'public: %p' % [methods.grep(/hoge/)]
puts 'private: %p' % [private_methods.grep(/hoge/)]
$ ruby -v test.rb
ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32]
public: []
private: [:hoge]
$ irb
irb(main):001:0> load("test.rb")
public: []
private: [:hoge]
=> true
irb(main):002:0> def fuga;end
=> :fuga
irb(main):003:0> puts 'public: %p' % [methods.grep(/fuga/)]
public: [:fuga]
=> nil
irb(main):004:0> puts 'private: %p' % [private_methods.grep(/fuga/)]
private: []
=> nil
98デフォルトの名無しさん (ワッチョイ cf2c-QclQ)
2021/02/24(水) 21:30:57.42ID:YN61hHjA0 irb, pry は特殊なのかな?
漏れは、VSCode のCode Runner で、
選択したコード片、またはファイル全体を、右クリックメニューから実行してる
これが楽
漏れは、VSCode のCode Runner で、
選択したコード片、またはファイル全体を、右クリックメニューから実行してる
これが楽
99デフォルトの名無しさん (ワッチョイ de2c-tEpZ)
2021/02/27(土) 23:10:50.88ID:xGn+rZN00 WEB+DB vol.121
Ruby 3 特集、30 ページ分
Ruby 3 特集、30 ページ分
100デフォルトの名無しさん (ワッチョイ 692c-3kAG)
2021/03/13(土) 14:19:53.90ID:33EHGK5P0 Ruby on Rails 6 の本を書いている、2人の新刊
Go言語 ハンズオン、掌田津耶乃、2021/3/6
Elixir実践ガイド、黒田努、2021/2/5
Ruby からGoか、Elixirか、どっちへ進むべきか?
mruby, Rust もあるけど
Go言語 ハンズオン、掌田津耶乃、2021/3/6
Elixir実践ガイド、黒田努、2021/2/5
Ruby からGoか、Elixirか、どっちへ進むべきか?
mruby, Rust もあるけど
101デフォルトの名無しさん (ワッチョイ 1384-L4xa)
2021/03/24(水) 00:55:11.21ID:rggl2LA70 Ruby勉強始めたんですが
↓この部分が毎回書きづらいです
コード補完とかってないんですか?
a.map{|x|x+1}←の|x|の部分
↓この部分が毎回書きづらいです
コード補完とかってないんですか?
a.map{|x|x+1}←の|x|の部分
102デフォルトの名無しさん (ワッチョイ 1133-urfw)
2021/03/24(水) 04:11:25.02ID:itekFGrv0 vscodeとかでスニペットを利用するとか?
103デフォルトの名無しさん (ワッチョイ 1384-L4xa)
2021/03/24(水) 08:25:35.13ID:rggl2LA70 ruby開発はvscodeが多いの?
104デフォルトの名無しさん (ワッチョイ 937d-ohIf)
2021/03/24(水) 08:57:21.23ID:6ziJ9FkW0105デフォルトの名無しさん (ワッチョイ 1384-L4xa)
2021/03/24(水) 21:09:04.11ID:rggl2LA70 >>104
ありがとうございます!
ありがとうございます!
レスを投稿する
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 減税は低所得者差別
- 元無職「お世話になりました」
- 【動画】陽キャ、パルクール失敗
