1 名前:デフォルトの名無しさん [2020/12/25(金) 04:24:27.68 ID:aa9Khe9z0.net] プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ 質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。 Ruby on Rails については、WEBプログラミング板で 前スレ Ruby 初心者スレッド Part 66 https://mevius.5ch.net/test/read.cgi/tech/1578068134/ るりまサーチ (リファレンス検索) rurema.clear-code.com/ Rubyist Magazine - るびま jp.rubyist.net/magazine/ 逆引きRuby www.namaraii.com/rubytips/ Ruby コミュニティ公式 https://www.ruby-lang.org/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
110 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 01:45:05.99 ID:6d4XTvSa0.net] rubyでExcelへデータを出力しようとしているんですが、 どうしてもできないことがあり質問します。 ruby -v 3.0.0p0 rubyでExcelのデータを検索するときはFindを使うと思うのですが、 日付項目(シリアル値)を検索するときはどうすればいいのでしょうか。 以下をやってみましたが、検索できませんでした。 find('3/30') ・・・Excelの表示を指定 find('4321') ・・・シリアル値を指定
111 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 16:34:32.49 ID:NYPc8neoM.net] >>110 使ってるライブラリが分からないと答えようがない
112 名前:デフォルトの名無しさん mailto:sage [2021/04/03(土) 07:31:20.35 ID:zsAyk+ZV0.net] >>111 失礼しました。 ライブラリはWin32OLEです
113 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 17:40:29.80 ID:DBwHd1C70.net] >>110 上はできた。下はダメだった ちなみに表示が3月30日の場合、find('3/30') はいけたが find('3月30日') はダメ
114 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 19:54:57.14 ID:J1UfrlOYa.net] >>113 え、いけました?? 家に帰ったらもう一回やってみます。 教えて頂いてありがとうございます。
115 名前:デフォルトの名無しさん [2021/04/09(金) 09:17:30.32 ID:+qPfXmCt0.net] >>17 on ruby rails と出力されると思いきや、ruby “on ¥n rails”だって。 なんでだ? Here Documentの仕様ってどうなってんの?
116 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 11:00:25.81 ID:9/L6JEXU0.net] >>115 終端行までなんだから、その前にある改行文字は含まれてあたりまえやろ。
117 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 21:32:27.88 ID:GCSyW51k0.net] ヒアドキュメントの評価値とは別に #{print "ruby "} で"ruby "とprintされるクソみたいなコードだから
118 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 21:45:43.65 ID:PjsXsZBpr.net] まあなぞなぞみたいなもんでしょ クソコードとかいったら身も蓋もない
119 名前:デフォルトの名無しさん mailto:sage [2021/04/09(金) 22:01:43.18 ID:pm4fGgmv0.net] Loggerで出力する内容を奪い取って、他のメソッド呼び出しにするってどう言う実装したらいいですか? 例えば全てをTest::any::log(msg)を内部的に呼び出して終わるみたいなLoggerを作るにはどうしたらいいですか? Logger.new(STDERR)だと全て標準エラーに出力ですが、これを全てTest::any::log(msg)の呼び出しで標準エラーには何も出さないloggerを作りたいのです
120 名前:デフォルトの名無しさん [2021/04/10(土) 02:35:21.72 ID:OA/XTa6K0.net] C:/Ruby25-x64/lib/ruby/2.5.0/fileutils.rb では、 インスタンス変数に、標準エラーを代入してる @fileutils_output ||= $stderr @fileutils_output = $stderr 漏れは、それを真似て、 DryRun の時だけ、noop: true, verbose: true を付けて、 標準出力から標準エラーに切り替えるような、モジュールを作っている module MyFileUtils @fileutils_output = $stdout extend self def f( *args, **options ) # 配列・ハッシュ p @fileutils_output @fileutils_output.puts( args, options ) end module DryRun include MyFileUtils @fileutils_output = $stderr extend self def f( *args, **options ) super( *args, **options, noop: true, verbose: true ) end end end MyFileUtils.f( 1, 2, a: 8, b: 9 ) MyFileUtils::DryRun.f( 1, 2, a: 8, b: 9 )
121 名前:120 mailto:sage [2021/04/10(土) 06:15:13.31 ID:OA/XTa6K0.net] Ruby 逆引きハンドブックには、こう書いてある Logger.new の引数には、ログファイルパスか、 write, close が定義された、IO などのオブジェクトを指定する
122 名前:120 mailto:sage [2021/04/10(土) 06:29:33.47 ID:OA/XTa6K0.net] Ruby 逆引きハンドブックには、メソッドオブジェクトも載ってる def f_a( ) :a end def f_b( ) :b end def doit( command ) m = method( command ) m.call end def doit_2( command ) __send__ command end p doit( :f_a ) #=> :a p doit_2( :f_b ) #=> :b
123 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 15:02:16.96 ID:/0Vt4vuj0.net] gem installって個別のユーザー環境のみに反映することってできますか? インストールしたらそのPCを使ってる全ユーザーに反映されないようにしたいです どうしたらいいですか?
124 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 15:47:13.93 ID:0xQQ9slV0.net] 1. 環境変数のGEM_HOMEを指定する 2. --install-dirを指定してインストール 3. --user-installを指定してインストール 4. rbenvを使う どれでもいける とりあえずgem help installでヘルプを見るといい
125 名前:デフォルトの名無しさん mailto:sage [2021/04/14(水) 18:21:50.16 ID:/0Vt4vuj0.net] >>124 ありがとうございます
126 名前:デフォルトの名無しさん [2021/04/23(金) 12:36:53.84 ID:j9CkA04K0.net] {"status"=>0, "data"=>[{"ask"=>"5370001", "bid"=>"5370000", "high"=>"5634576", "last"=>"5371160", "low"=>"5243350", "symbol"=>"BTC", "timestamp"=>"2021-04-23T03:22:36.028Z", "volume"=>"854.3707"}], "responsetime"=>"2021-04-23T03:22:37.031Z"} このハッシュ?から5370000の値を取り出したいのですが上手くいきません。助けてください
127 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 19:53:44.06 ID:gO4UxsH40.net] >>126 どうやろうとしてうまくいかんの?
128 名前:デフォルトの名無しさん [2021/04/23(金) 20:21:10.93 ID:v3P9E6mR0.net] >>127 jsonをパースして変数に入れてbidが持つ値を出力したいのですがnilが返ってきます
129 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 20:36:39.90 ID:7NT1P8pu0.net] >>128 やなくて、コードをはれ。 まあ、たぶんdataが配列なのを見逃して0がぬけてるだけやろ。 dig('data',0,'bid')とか?
130 名前:デフォルトの名無しさん [2021/04/23(金) 21:26:36.95 ID:v3P9E6mR0.net] >>129 ヒントを元にそれぞれブラケットで囲ったら行けました。ありがとうございました
131 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 21:33:33.39 ID:dol38sZTr.net] 本質的に理解してないやろこれ
132 名前:デフォルトの名無しさん [2021/04/24(土) 06:25:40.53 ID:+DYpagDZ0.net] >>131 大変申し訳ありません。digについて理解しました。重ねてありがとうございました。
133 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 15:27:17.38 ID:vVXlCGEI0.net] 度々申し訳ないのですが {"status"=>0, "data"=>[{"amount"=>"0", "available"=>"0", "conversionRate"=>"1", "symbol"=>"JPY"}, {"amount"=>"0", "available"=>"0", "conversionRate"=>"5377836", "symbol"=>"BTC"}], "responsetime"=>"2021-04-24T06:14:41.169Z"} ここから5377836を出力する場合も理解さえできればdigでいけるのですか? 今のコード r_hash = JSON.parse(response.body) puts r_hash["data"][1]["conversionRate"] # =>"5377836" できれば覚えたてのこれ使いたい↓ puts response_hash = dig("data",ここわからない,"conversionRate")
134 名前:デフォルトの名無しさん [2021/04/24(土) 16:46:14.63 ID:j3qP/sr70.net] ブラケットで書くのと同じだよ r_hash["data"][1]["conversionRate"] r_hash.dig("data", 1, "conversionRate")
135 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:29:45.06 ID:+DYpagDZ0.net] >>134 ありがとうございます。無事取れたのですが引数が頭の中でぐるぐるしてるのでもう一度リファレンス見てきます
136 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:33:17.78 ID:rJwQsTRc0.net] つーか、リストとハッシュについての理解が足りないんちゃうか? インデックスとかキーとかの感覚がわからんのやろ。
137 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:56:02.00 ID:+DYpagDZ0.net] >>136 おっしゃる通りです。{[{}{}]} この形で返ってくるともう何がなんだか
138 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:27:13.97 ID:IoXyqRUD0.net] 配列の添え字(数字)が文字列になっただけだよ 添え字が数字じゃないので一づつ増やすことはできないけど
139 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:07:39.95 ID:EAdTvuiP0.net] >>138 アドバイスありがとうございます。悲しいくらい今日も予定がないので学習のため一個ずつ値を呼び出して確認してみます。
140 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:30:05.13 ID:M6swdTrH0.net] >>139 知ってるかもしれないけど この手のは p よりも pp で表示するとわかりやすいよ Ruby 2.5以降は requireしなくても最初から pp が使える
141 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 13:55:29.69 ID:oFpMkyEJ0.net] 初心者は、dot install, progate などをやれば?
142 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:44:12.74 ID:EAdTvuiP0.net] >>140 pp知りませんでした。ありがとうございます。かなり頭の中の世界が変わりました。 プロゲートはいまいちだったのでユーデミーの教材漁ってたのですがもう一度プロゲートやり直してみます
143 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 15:53:02.64 ID:I4PgyU7Gr.net] マニュアル読めと言うのは初心者には酷か? https://docs.ruby-lang.org/ja/latest/doc/index.html
144 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 16:58:50.92 ID:oFpMkyEJ0.net] 本が好きなら、定番の入門書「たのしいRuby 第6版」2019 とか YouTube で有名な、雑食系エンジニア・KENTA のサロンは皆、Ruby on Rails じゃないの?
145 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 17:29:21.56 .net] Excelのsheet1に A列 B列 1行目 https://www.navitime.co.jp/poi?spot=02022-1220435&ncm=1 https://rilakkumasabo.jp/shop/%E5%B5%90%E5%B1%B1https://www.telacoya.co.jp/company/shop_detail/shop_detail-130/www.arashiyamaryo.or.jp/access/ 2行目 https://www.navitime.co.jp/poi?spot=02022-1212380&ncm=1 https://co-trip.jp/article/191673/https://hitosara.com/ch_478603/https://kyo-soku.com/2020/04/03/salon-de-muge/ 3行目 https://www.navitime.co.jp/poi?spot=01125-t100443972s&ncm=1 https://www.fruitmoti-shoutikudou.jp/https://sweetsguide.jp/product/90706https://osakalucci.jp/shoutikudou と記載されているのを sheet2に A列 B列 1行目 https://www.navitime.co.jp/poi?spot=02022-1220435&ncm=1 https://rilakkumasabo.jp/shop/%E5%B5%90%E5%B1%B1 2行目 https://www.navitime.co.jp/poi?spot=02022-1220435&ncm=1 https://www.telacoya.co.jp/company/shop_detail/shop_detail-130/ 3行目 https://www.navitime.co.jp/poi?spot=02022-1220435&ncm=1 www.arashiyamaryo.or.jp/access/ 4行目 https://www.navitime.co.jp/poi?spot=02022-1212380&ncm=1 https://co-trip.jp/article/191673/ 5行目 https://www.navitime.co.jp/poi?spot=02022-1212380&ncm=1 https://hitosara.com/ch_478603/ 6行目 https://www.navitime.co.jp/poi?spot=02022-1212380&ncm=1 https://kyo-soku.com/2020/04/03/salon-de-muge/ 7行目 https://www.navitime.co.jp/poi?spot=01125-t100443972s&ncm=1 https://www.fruitmoti-shoutikudou.jp/ 8行目 https://www.navitime.co.jp/poi?spot=01125-t100443972s&ncm=1 https://sweetsguide.jp/product/90706 9行目 https://www.navitime.co.jp/poi?spot=01125-t100443972s&ncm=1 https://osakalucci.jp/shoutikudou このように変換したいです。オンライン上でRubyを使用して作成したいのですが、どのようにすればよいでしょうか?
146 名前:デフォルトの名無しさん [2021/04/25(日) 18:11:40.31 ID:oFpMkyEJ0.net] まず、http://〜、https://〜 を、3つ連結した、 https://〜http://〜https://〜 みたいな文字列を、3つに分離する
147 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 18:37:11.77 ID:nrx375qK0.net] >>145 「オンライン」とは?サーバーでということか?Windows? Excelはxlsx?csvなら難しくはないが。。。 など、あぶなっかしいところが多すぎ。 初心者がやるにはたいへんやな。w やめといたら?
148 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 23:09:08.20 ID:oFpMkyEJ0.net] 3つに分離する部分だけを作った。 入出力の部分は、CSV モジュールを使えば? re = %r!https?://! # 正規表現。http/https input = String.new( "https://rilakkumasabo.jp/shop/%E5%B5%90%E5%B1%B1https://www.telacoya.co.jp/company/shop_detail/shop_detail-130/www.arashiyamaryo.or.jp/access/" ) positions = [ ] pos = 0 while md = re.match( input, pos ) positions.push md.begin( 0 ) # 一致した先頭文字h の位置 pos = md.end( 0 ) # 一致した末尾文字/ の次の文字の位置 end # 文字列の末尾から削除しながら、配列に入れていく urls = positions.reverse.map { |pos| input.slice!( pos..-1 ) } pp urls.reverse # 反転 出力 ["https://rilakkumasabo.jp/shop/%E5%B5%90%E5%B1%B1", "https://www.telacoya.co.jp/company/shop_detail/shop_detail-130/", "www.arashiyamaryo.or.jp/access/"]
149 名前:148 mailto:sage [2021/04/26(月) 13:51:09.40 ID:0DE0v1OZ0.net] 出来た! 文字列を3分割する部分を関数化して、呼び出す 入出力は、CSV 形式で。 入力ファイルは、input.csv paiza.IO などで実行してみれば? ただし、この前、paizaのソースコードが消えてしまったけど。 定期的に消えるのかな? # 引数の文字列を3分割して、配列に入れて返す def split_string( input_str ) re = %r!https?://! # 正規表現。http/https # 下で、slice! で変更するために、破壊的変更可能文字列へ変換する input = String.new( input_str ) positions = [ ] pos = 0 while md = re.match( input, pos ) positions.push md.begin( 0 ) # 一致した先頭文字・h の位置 pos = md.end( 0 ) # 一致した末尾文字・/ の次の文字の位置 end # 文字列の末尾から削除しながら、配列に入れていく urls = positions.reverse.map { |pos| input.slice!( pos..-1 ) } urls.reverse # 反転 end 次へ続く
150 名前:148 mailto:sage [2021/04/26(月) 13:52:06.70 ID:0DE0v1OZ0.net] require 'csv' result_ary = [ ] CSV.foreach( "input.csv" ) do |row| # 1行ずつ処理する split_ary = split_string( row[ 1 ] ) split_ary.each do |url| result_ary.push [ row[ 0 ], url ] end end # 2次元配列を、CSV 文字列に変換する csv_str = result_ary.map( &:to_csv ).join print csv_str
151 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 22:46:21.55 ID:RYaLTPlL0.net] paramsという名前のハッシュを関数の中で使う際、 :codeの組をhogeだけでなくmoge、kuge、sageなど 関数の引数で選べるようにする場合、 '+ 引数名 +'だとエラーになるようですが、 バリューに引数を使おうとしている事自体が根本的に間違っていますか? params = { :code=> 'hoge', ←'+ 引数名 +'だとダメ。ここを入れ替えたい :page => 1, :count => 5 }
152 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 22:54:52.82 ID:rfpJ92nWr.net] 意味が分からん。 エラーになるコードと希望する出力は何?
153 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 23:08:46.56 ID:RYaLTPlL0.net] >>152 APIを使用して住んでる地域の時間ごとの過去の天気を見る学習をするはずだったのですが 自分でも何がしたいのかわからなくなってきたのでちょっと出直します。 すみませんでした。
154 名前:デフォルトの名無しさん mailto:sage [2021/04/26(月) 23:31:12.51 ID:rfpJ92nWr.net] >>153 おう、がんばれ
155 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 00:08:05.54 ID:6stPm5Ss0.net] >>151 変数名と値(リテラル)の区別があやふやなんでは? 変数名をクォートしようとしている時点でヤバイ。
156 名前:デフォルトの名無しさん mailto:sage [2021/04/27(火) 16:05:13.93 .net] >>148-150 ありがとうございます。 rubyのインストールが上手く出来なかったので明日またやってみます。
157 名前:デフォルトの名無しさん mailto:sage [2021/04/28(水) 22:23:58.72 .net] 145です。 出来ました。ありがとうございます。
158 名前:デフォルトの名無しさん mailto:sage [2021/04/30(金) 21:24:36.83 ID:DJ/L1TU20.net] >>150 Array#to_csvってかなり非効率的なんで避けたほうが無難 csv_str = CSV.generate{|csv| result_ary.each{|it| csv << it } }
159 名前:デフォルトの名無しさん mailto:sage [2021/05/03(月) 11:06:41.86 ID:B6Xr9eKd0.net] Pythonみたいに行けてるエクセルライブラリが欲しい。。
160 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 09:35:54.83 ID:NUn3zAQRa.net] >>158 非効率というのは遅いって事ですか?
161 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 10:19:17.28 ID:iLdhy1ll0.net] >>160 require "bundler/inline" gemfile do source "https://rubygems.org" gem "benchmark_driver" end Benchmark.driver do |x| x.prelude %{require "csv"} x.prelude %{ITEMS = Array.new(1000){ ["fooo", 12345,6789] }} x.report "to_csv", %{ csv_str = ITEMS.map{ _1.to_csv }.join } x.report "&:to_csv", %{ csv_str = ITEMS.map(&:to_csv).join } x.report "generate", %{ csv_str = CSV.generate{|csv| ITEMS.each{|it| csv << it } } } end 計測すると6倍ほどto_csvの方が遅い事がわかる to_csvは https://github.com/ruby/csv/blob/efb257e28f85741fb5c2637f707121e55e4c5ca9/lib/csv/core_ext/array.rb https://github.com/ruby/csv/blob/efb257e28f85741fb5c2637f707121e55e4c5ca9/lib/csv.rb#L1452 見ると分かるがCSV.new等を毎回行う手抜き実装(バグりにくいというメリットは確かにある) 1行だけならともかく複数行をcsv化したいなら微妙
162 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 11:11:15.22 ID:heOXda5CM.net] 実際にはどうせファイルに書き込むんだからファイルIOがボトルネックになるんで誤差だよ 無意味なベンチマークだね
163 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 11:18:11.79 ID:VEm96Egx0.net] >>162 キャッシュなしフロッピーディスク💾を使ってるのかな?w
164 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 11:41:45.65 ID:iLdhy1ll0.net] >>162 Benchmark.driver do |x| x.prelude %{require "csv"} x.prelude %{require "tempfile"} x.prelude %{ITEMS = Array.new(1000){ ["fooo", 12345,6789] }} x.report "to_csv", %{ Tempfile.create{ _1.write ITEMS.map(&:to_csv).join } } x.report "generate", %{ Tempfile.create{ _1.write CSV.generate{|csv| ITEMS.each{|it| csv << it } } }} end 確かに縮まりはしたが うちのオンボロPCでも5倍弱の差が出ました。
165 名前:デフォルトの名無しさん mailto:sage [2021/05/12(水) 22:35:04.85 ID:gVUbVQ8ua.net] 何秒が何秒になったんですか?
166 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 17:26:14.50 ID:iV+6o72S0.net] c="C:\Program Files\7-Zip\7z.exe" p c で出力は > "C:Program Files\a-Zip\az.exe" となってしまうんですが、なんで7がaに変わってしまってるんでしょうか? 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]です
167 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 17:31:29.95 ID:DkdlQ1eQ0.net] https://ja.wikipedia.org/wiki/ベル文字 > ベル文字は、ASCIIとUnicodeでは十進数で7 > 1972年に作られたC言語では、ベル文字は文字定数 \aで表される。'a'は"alert"や"audible"の頭文字である。'b'は既にバックスペースに使われていた。
168 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 18:04:34.76 ID:uwqmKkHK0.net] >>166 バックスラッシュ記法で8進数表記のパターンとして解釈されるから 式展開が必要なければシングルクウォートにするといい https://docs.ruby-lang.org/ja/3.0.0/doc/spec=2fliteral.html#backslash ¥007も¥07も¥7も同じ C言語由来のエスケープシーケンス
169 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 18:56:08.30 ID:acqsmkid0.net] >>166 >>168 のシングルクォートよりも、パスの区切り文字を「/」にすることをすすめたい。 パスの区切り文字が「¥」でなければいけないのはコマンドプロンプトなど一部のみ。 だいたいが「/」でも可。
170 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 21:37:59.00 ID:iV+6o72S0.net] >>167-169 まとレスにて失礼します aに置き換わる謎はわかりました シングルクォートなのですが、面倒くさいことにWindowsの決め打ちで空白が入っているので それを考えるとダブルクォートで囲まざるを得ず、けっきょくこんな形になってしまいました c="\"C:\\Program Files\\7-Zip\\7z.exe\"" このあと system("#{c} a -mx9 ...") みたいな形で呼び出します
171 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 22:03:40.90 ID:eWE6r8CI0.net] >>170 c = '"C:\Program Files\7-Zip\7z.exe"'
172 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 19:46:00.37 ID:onKqKKZNr.net] >>170 すごく短くまとまってるから、一度公式のリファレンス読んだ方がいいよ https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html#string
173 名前:デフォルトの名無しさん mailto:sage [2021/06/02(水) 20:29:52.62 ID:92rWXivp0.net] >>171 ああなるほど それで行けますね 昔は自分でもそんな書き方してたかもしれなかったです >>172 ご案内ありがとうございます シングルクォートとダブルクォートの意味とか違いは理解していたのですが 中に\入れたときとか、とくに168さんに指摘されたように8進数での扱いが特別だということは よく理解していなかったので、これを機会に知識を正確にしておきます
174 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 18:27:26.17 ID:peqY6uPj0.net] 完全にプログラミング0からで「スラスラ読めるrubyふりがなプログラミング」を買って始めたのですが macbookairでrbenvでruby3.0.1をダウンロードしてrbenv versionでは3.0.1と表示されるのですがruby -vでは2.6.3と元々入ってるrubyが表示されます まだ何も分かってないのにhomebrewとrbenvのダウンロードが上手くいかず色々見ながらやってきたので余計な事をしてしまったのではないかと心配です
175 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 18:56:51.38 ID:peqY6uPj0.net] >>174 ですが 自己解決しました bash profileに何か誤ったものを書き込んでしまったようで消したら3.0.1に切り替わりました
176 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 14:54:45.98 ID:uC9Joojh0.net] Rubyで、syntax error 的なものが生じていても、そのまま実行が続けられている ように見える現象が時々起きる。 これは何が起きている? errorが起きた場所で停止させる方法はある?
177 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 15:26:37.54 ID:SGijWivar.net] rescue SyntaxError
178 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 20:10:36.75 ID:K+vX0E1p0.net] >>176 そのエラーが起こった時に何が表示されているの?
179 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 16:19:02.76 ID:1amPE6il0.net] >>178 例えば、xxx という変数を定義してない状態で、 [aaa.rb] def some_func() ・・・ print( "xxx=#{xxx}\n" ); ・・・ end という関数を呼び出すと、 aaa.rb:3882:in `some_func': undefined local variable or method `xxx' for main:Object (NameError) from aaa.rb:5638:in `main' from aaa.rb:5667:in `<main>' と出るが、そのまま実行が続けられてしまう。
180 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:06:19.62 ID:B1fTG1Q6r.net] >>179 begin rescue end の構造してるだけじゃないの
181 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:09:33.22 ID:1amPE6il0.net] >>180 そういうものは使ってない。
182 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:12:50.30 ID:B1fTG1Q6r.net] >>181 再現するコードを共有することはできますか?
183 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:37:47.34 ID:1amPE6il0.net] >>182 できない。 大事なコードだから非公開。
184 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 17:44:51.53 ID:B1fTG1Q6r.net] そうであれば我々にはわかりえない。 まあどっかでrequireをオーバーライドしてるとかじゃないの。
185 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 18:17:08.76 ID:1amPE6il0.net] >>184 全部自分で書いたコードで、Rubyの基本的な機能しか使ってない。 また、検索してみたが、begin や rescue というキーワードは全く使ってなかった。
186 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 21:13:38.74 ID:kq17Ee/S0.net] 別スレッドも停止させたいのであれば、Thread.abort_on_exception=trueが必要とか?
187 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 22:12:59.95 ID:1amPE6il0.net] >>186 シングルスレッドしか使ってない。
188 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 23:44:17.52 ID:///+rfU80.net] もうええて。 追加情報がなきゃあもうムリやろ。
189 名前:デフォルトの名無しさん [2021/06/07(月) 08:20:47.92 ID:Q1HfUOnq0.net] バグだね。
190 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 12:05:22.54 ID:Qb3DiLXp0.net] さすがのRubyでも、そんなアホみたいな「バグ」なんかないやろ。w
191 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 13:11:30.61 ID:tJ2RoPVV0.net] おまえさん一人だけの症状なんだし再現できるコード・環境を出せない以上おま環
192 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 13:15:54.00 ID:pl6618+T0.net] >>170 コマンドプロンプトでも普通に、/ を使える。 これで実行できる ruby C:/Users/Owner/Documents/a.rb パスに空白が入っている場合は、シングル・ダブルクォーテーションで囲む PowerShell(PS)でも良いし。 Windows Terminal なら、Bash, PS、コマンドプロンプトの3つを使える
193 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 10:27:31.04 ID:ljhkY4kR0.net] Powershellで標準出力をリダイレクトしてると Ctrl-C押した時at_exitに飛ばずに死ぬの何なの?
194 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 11:47:19.54 ID:dOMi6vvz0.net] そのアプリが、SIG-INT・中断をキャッチしない場合は、 SIG-KILL・強制終了されるのだろう 強制終了は、受け身が取れない。 たぶん、デフォルトの挙動は、そうなのだろう
195 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 12:46:57.32 ID:ljhkY4kR0.net] リダイレクトしていなければ普通にat_exitに飛ぶんだよ
196 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 14:00:54.76 ID:8dk2g5lI0.net] 試しにpythonでもatexit使ってみたが同様に強制終了される Traceback出力されるのにatexitは実行されない
197 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 14:04:16.61 ID:xXGg8olZ0.net] Rubyスレなんだが!
198 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 14:34:31.00 ID:8dk2g5lI0.net] powershellがバグってる cmd /c 経由なら正常にリダイレクトおよびctrl+cできたわ
199 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 14:44:58.07 ID:ljhkY4kR0.net] え〜〜マジっすか 検証してくれてありがとうございました。
200 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 17:51:22.97 ID:ljhkY4kR0.net] まずパイプが終了して、それに巻き込まれてpythonのプロセスが落ちるとかなんとか rubyの挙動を調べるためにpythonでググるってなんだかな
201 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 20:59:45.11 ID:7WqSN2WLr.net] そういやパイプ周りの不具合がなんかあったな
202 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 21:13:49.57 ID:7WqSN2WLr.net] と思ったら今回の件と何も関係が無かったわ。 https://bugs.ruby-lang.org/issues/14245
203 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 21:15:32.86 ID:S62X2+fs0.net] >>159 ほんと、これは甚だ同意。
204 名前:デフォルトの名無しさん mailto:sage [2021/06/10(木) 21:34:01.60 ID:Hn4s45bFd.net] 現在ラズパイにrubyとpythonを入れて処理を並列に自動実行しようと思ってます ただ台数が多いため一台ごとにソースを変えるのは回避したいです なので理想は起動時に最新のソースに自動で更新です このようなことをしたいときはどのようにするのが一番簡単でしょうか? rubyでサーバーから最新のソースをコピーしたあとにrubyとpythonを実行? 家で使用するのでセキュリティーとかは気にしません
205 名前:デフォルトの名無しさん mailto:sage [2021/06/10(木) 22:40:14.97 ID:t0oieqtV0.net] >>204 rsyncすれば?
206 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 09:43:06.27 ID:Jo75oGSbM.net] >>204 厳密に一斉に切り替わらなくてもいいならcronとかで定期的にGitHubからpullする 手段が目的だと堂々と言えるならKubernetesのクラスタ組むとかも面白い
207 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 23:47:46.99 ID:vtN99wcma.net] ライブラリのopenのように、 open() do |f| ・・・ end と書いてもよく、 f= open() ・・・ f.close と書いてもいいというクラスor メソッドは どうやって作ればいいのでしょうか。 yieldを使うとイテレータのみになってしまうし、 returnすると下の例だけになってしまいます。
208 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 00:15:52.97 ID:PG/lAwcj0.net] if block_given? で分岐
209 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 07:40:00.21 ID:R0/fGgxp0.net] >>208 ありがとうございます。 うまく作れました。
210 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 07:56:14.83 ID:R0/fGgxp0.net] すみません、もう一つ教えて下さい。 rubyというかプログラムを書くとき全般の注意として、 ファイルopenとcloseはなるべく近くに書くようにと ありました。 恐らくclose漏れを警戒しているのだと思います。 yieldを使えば、以下コードでそれを実現できます。 def fileInterface f= open() begin yield f ensure f.close end end yieldを使わないパターンでは、 closeを近くにかけないのですが解決策あるでしょうか。 def open @f= open() return @f end def close @f.close end openメソッド実行 ・・・ ・・・(大量の処理) closeメソッド実行