[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2ch.scのread.cgiへ]
Update time : 01/06 23:49 / Filesize : 225 KB / Number-of Response : 740
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 67



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

48 名前:デフォルトの名無しさん [2021/01/11(月) 16:04:22.15 ID:KSKcxhht0.net]
Windowsに嫌われてるとか言ってたな。

49 名前:デフォルトの名無しさん mailto:sage [2021/01/11(月) 21:15:58.19 ID:iHOPiDVy0.net]
>>47
いや、さすがにWin32APIはしゃあない。
むしろ、とっくに避けていなければならんかったレベル。

50 名前:デフォルトの名無しさん [2021/01/11(月) 22:59:29.10 ID:jE21Oyzwp.net]
>>46
なるほど。ありがとうございます。
わからず、ずっと悩んでました。

51 名前:デフォルトの名無しさん mailto:sage [2021/01/21(木) 04:05:57.95 ID:wRHR1dSL0.net]
環境変数の設定を一切せず
rubyの起動オプションですべて明示するというやり方って
現実的になにかトラブルが発生したりしますか?

52 名前:デフォルトの名無しさん mailto:sage [2021/01/21(木) 04:54:29.71 ID:GWoeC7/l0.net]
コマンドラインの長さとか?
最近ならもうだいじょうぶかな?

53 名前:デフォルトの名無しさん mailto:sage [2021/01/22(金) 08:44:48.38 ID:MPceXAls0.net]
そんなに長い指定はないので今の所問題く動いているっぽいです
ありがとうございます

54 名前:デフォルトの名無しさん mailto:sage [2021/01/23(土) 12:19:40.78 ID:joIGd+XG0.net]
教えていただきたいのですが、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か何かを使って出力する方法はありますか?


よろしくお願いいたします

55 名前:デフォルトの名無しさん mailto:sage [2021/01/24(日) 22:13:50.30 ID:kU4Polklr.net]
>>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

56 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 17:06:01.79 ID:+q31tGtg0.net]
黒魔術・メタプログラミングで、よく見る

インスタンス変数用のinstance_variables、
クラス/モジュールには、クラス変数(@@these_things)用のclass_variables



57 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 18:43:13.07 ID:co/Rkwpa0.net]
>>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 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 18:47:31.66 ID:co/Rkwpa0.net]
Structは初期化時の引数の数が一致してなくてもエラーにならずにnilがデフォルト値になる
それがいやな場合は継承してコンストラクタを上書き

class Bar < Struct.new("Bar", :name, :id, :data1, :data2)
def initialize(name, id, data1=nil, data2=nil)
super
end
end

59 名前:デフォルトの名無しさん [2021/01/29(金) 04:39:32.60 ID:sK+sAxFfM.net]
質問させてください。
以下のようなデータがあるとして。

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 名前:デフォルトの名無しさん [2021/01/29(金) 04:40:41.40 ID:sK+sAxFfM.net]
>>59
すいません、4じゃなくて2でした。。

61 名前:デフォルトの名無しさん mailto:sage [2021/01/29(金) 13:59:12.19 ID:IOP7xwlv0.net]
普通にブラケットでアクセスするかdigしたほうがいい気がするが
どうしてもドットでアクセスしたいなら再帰的にOpenStructに変換する

data = JSON.parse(data.to_json, object_class: OpenStruct)
data.metadata.commission
#=> "2"

62 名前:デフォルトの名無しさん mailto:sage [2021/01/29(金) 14:31:44.23 ID:MVM9RsSY0.net]
ハッシュだから、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

63 名前:デフォルトの名無しさん [2021/01/29(金) 14:57:50.28 ID:sK+sAxFfM.net]
>>61, >>62

ありがとうございます。
背景を書いてませんでしたが、rspec で必要なデータなのです。。
後出しですいません。
なので data.metadata.commission で確認できることが必要なので、Struct(もしくはOpenStruct)で、変換させてみます。

64 名前:デフォルトの名無しさん mailto:sage [2021/01/29(金) 21:09:33.54 ID:/bfQuQp2r.net]
>>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 名前:デフォルトの名無しさん mailto:sage [2021/02/03(水) 22:28:17.16 ID:S1/u+juE0.net]
>>54です。
アドバイスありがとうございます。

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

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

ありがとうございました。

66 名前:デフォルトの名無しさん mailto:sage [2021/02/03(水) 23:01:53.55 ID:q3Uucr840.net]
Struct.membersでいいんじゃないの?



67 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 21:57:18.80 ID:RWoPy8BIa.net]
https://twitter.com/yukihiro_matz/status/1358048924141973504?s=20
> 世界一周クルーズの広告が表示され、妻と「コロナ収まったら行きたいね」
世界一周は最低500万、上は数千万にもなる。
うっかり金持ち自慢をしてしまう…
(deleted an unsolicited ad)

68 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 15:35:22.83 ID:Ru8WMsS80.net]
インストールしなくていい機能縮小版rubyを作って、awkを代替えできるようにする
というのはどうでしょう

69 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 19:50:07.01 ID:74skEOdG0.net]
>>68
そんな用途なら、互換性が期待できないRubyよりも、信頼できるPerlのほうがええやろ。

70 名前:デフォルトの名無しさん [2021/02/15(月) 00:33:16.20 ID:KKKRaaGF0.net]
すまん唐突だけど質問させて eql口頭でってなんで読んだら良いの?

71 名前:デフォルトの名無しさん [2021/02/15(月) 00:34:14.29 ID:KKKRaaGF0.net]
ミスった
eqlって口頭では何て発音したら良いの? です

72 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 11:38:51.60 ID:adP2s3N/r.net]
イコールって読んでる
equal?とeql?が入り乱れて使われてるところはしらんが。
まぁrubyしてるならequalとeql両方知ってるはずだし短いイコールの方、とかでも伝わるんじゃ

73 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 13:06:36.01 ID:2czEo7/ia.net]
イーキュー
イーキューエル
イコール

74 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 21:15:47.96 ID:oDLt9usUr.net]
イークワル

75 名前:デフォルトの名無しさん [2021/02/16(火) 21:32:31.57 ID:fxt1OOtg0.net]
>>72
rubyやり始めたところで、eqlがイコールって気づかなかった。短い方のイコールって良いですね!ありがとうございます。
>>73
自分もイーキューエルだて頭の中で読んでた
>>74
なんでやーーー!!

76 名前:デフォルトの名無しさん [2021/02/16(火) 22:13:45.11 ID:fxt1OOtg0.net]
すみません、質問です
hash生成時に、
str={"key1" = "val1"}
ではエラーになる理由を教えてください。



77 名前:デフォルトの名無しさん mailto:sage [2021/02/16(火) 22:25:37.65 ID:F9q4wvox0.net]
p hash = { "a" => "b" } #=> {"a"=>"b"}

全角の{}を使うな。
文字列以外は半角英数字のみ

78 名前:デフォルトの名無しさん [2021/02/16(火) 22:28:16.05 ID:fxt1OOtg0.net]
>>77
すみません、携帯からで全角と半角を間違えてしまいました。半角として見てくださいm(_ _)m

79 名前:77 mailto:sage [2021/02/16(火) 23:01:49.84 ID:F9q4wvox0.net]
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: はシンボルのまま

80 名前:デフォルトの名無しさん [2021/02/16(火) 23:13:47.99 ID:fxt1OOtg0.net]
書いていただいた方法でないと生成できないのですね
丁寧な回答ありがとうございました

81 名前:デフォルトの名無しさん mailto:sage [2021/02/17(水) 00:25:13.96 ID:p6fAds/B0.net]
つーか、なんで「=」でいいと思ったんだか。w

82 名前:デフォルトの名無しさん [2021/02/20(土) 02:27:26.66 ID:SWSWE4Ss0.net]
AtCoderの解答見てると、rubyで巨大配列を扱うような時に激遅になりがちな気がする
配列アクセスの遅さなのかループの遅さなのかわからんが

83 名前:デフォルトの名無しさん mailto:sage [2021/02/20(土) 05:46:26.76 ID:CT8193ch0.net]
JIT があるから、1秒間で100万回ループすると、ネイティブコードにコンパイルされて、

1秒間で1,000万回ループできるようになる

84 名前:デフォルトの名無しさん [2021/02/23(火) 21:47:53.55 ID:QIohwxjcM.net]
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]
です。

85 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 22:02:57.19 ID:IEGWDKD5r.net]
https://docs.ruby-lang.org/ja/latest/class/main.html
>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。

って思ったけどこっちの環境でもprivateにならないな
はて、何故でしょう

86 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 02:17:06.53 ID:hlmSDKs+0.net]
バグじゃね?



87 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 02:20:59.00 ID:YN61hHjA0.net]
ruby 2.6.6 [x86_64-linux] なら、

def test; p test; end

p Enumerable.methods.grep(/test/) #=> [ ]

88 名前:87 mailto:sage [2021/02/24(水) 02:26:45.21 ID:YN61hHjA0.net]
p test が文法エラーになるのでは?

test という識別子が存在しないから

89 名前:デフォルトの名無しさん [2021/02/24(水) 07:33:53.13 ID:UUqFv7Fhp.net]
0084です。

def test; p test; end
ではなく、
def test; p “test”; end
でした。
大変申し訳ありませんでした。
ほかのメソッドでも同じような動きを確認しています。今日は立て込んでしまっているので、追って別のメソッドの例も提示します。

90 名前:デフォルトの名無しさん [2021/02/24(水) 07:38:08.91 ID:UUqFv7Fhp.net]
>>0085さん、確認ありがとうございます。

私は初心者なので、以下の認識で正しいか、何か例外があるのか不安でお尋ねしました。認識は正しかったようですので、もう少し調べてみます。

>トップレベルで定義したメソッドは Object の private インスタンスメソッドとして定義されます。

91 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 10:21:05.87 ID:a7gl+o1qM.net]
privateかどうかをどうやって確認したの?
要再現コード

92 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 11:26:34.15 ID:9gaCPeun0.net]
環境を作り直したほうがよさそう

93 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 12:25:28.67 ID:hlmSDKs+0.net]
ruby 2.6 => [ ]
ruby 2.7 => [:test]
ruby 3.0 => [ ]

94 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 12:35:04.10 ID:hlmSDKs+0.net]
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!"

95 名前:デフォルトの名無しさん [2021/02/24(水) 20:33:38.12 ID:p2P+ZlS6M.net]
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/)
=> []

96 名前:デフォルトの名無しさん [2021/02/24(水) 20:38:46.87 ID:p2P+ZlS6M.net]
90です。
92さんがおっしゃる通り、環境を作り直すこととします。
私の疑問を受けて、再現性について試していただいた皆様、
ご協力ありがとうございました。



97 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 20:41:24.99 ID:MS8741jMr.net]
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

98 名前:デフォルトの名無しさん mailto:sage [2021/02/24(水) 21:30:57.42 ID:YN61hHjA0.net]
irb, pry は特殊なのかな?

漏れは、VSCode のCode Runner で、
選択したコード片、またはファイル全体を、右クリックメニューから実行してる

これが楽

99 名前:デフォルトの名無しさん [2021/02/27(土) 23:10:50.88 ID:xGn+rZN00.net]
WEB+DB vol.121

Ruby 3 特集、30 ページ分

100 名前:デフォルトの名無しさん [2021/03/13(土) 14:19:53.90 ID:33EHGK5P0.net]
Ruby on Rails 6 の本を書いている、2人の新刊

Go言語 ハンズオン、掌田津耶乃、2021/3/6
Elixir実践ガイド、黒田努、2021/2/5

Ruby からGoか、Elixirか、どっちへ進むべきか?
mruby, Rust もあるけど

101 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 00:55:11.21 ID:rggl2LA70.net]
Ruby勉強始めたんですが
↓この部分が毎回書きづらいです
コード補完とかってないんですか?


a.map{|x|x+1}←の|x|の部分

102 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 04:11:25.02 ID:itekFGrv0.net]
vscodeとかでスニペットを利用するとか?

103 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 08:25:35.13 ID:rggl2LA70.net]
ruby開発はvscodeが多いの?

104 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 08:57:21.23 ID:6ziJ9FkW0.net]
>>101
Ruby 2.7 以降は、番号指定パラメータが導入されたので
a.map{_1+1}

105 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 21:09:04.11 ID:rggl2LA70.net]
>>104
ありがとうございます!

106 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 21:14:35.26 ID:9CHTdUsFr.net]
え、それでいいんか……



107 名前:デフォルトの名無しさん [2021/03/25(木) 16:55:46.31 ID:LuSagST9r.net]
プログラミング言語Crystal、初のメジャーリリースとなるバージョン1.0を公開

108 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 18:17:35.84 ID:18nzHvsr0.net]
最近は全言語で、VSCode の拡張機能・Remote Container で、Docker を使う

Windows 10 Home でも、WSL2 が出来るようになった

109 名前:デフォルトの名無しさん mailto:sage [2021/03/25(木) 18:25:49.27 ID:18nzHvsr0.net]
Elixir でも、無名関数をキャプチャー演算子・& を使って、短く書ける

fn a, b -> a * b end

&(&1 * &2)
& &1 * &2

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/"]






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<225KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef