X



Ruby 初心者スレッド Part 65
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん (ワッチョイ 0f80-JI52)
垢版 |
2018/12/22(土) 04:43:34.03ID:84E3pYZa0
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ

質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で

前スレ
Ruby 初心者スレッド Part 64
https://mevius.5ch.net/test/read.cgi/tech/1535797516/

るりまサーチ (リファレンス検索)
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
0823デフォルトの名無しさん (アウウィフ FF2f-DOEl)
垢版 |
2019/11/06(水) 19:55:23.52ID:o3tEvZiYF
HTML (HTTP) で Encoding Shift_JIS って書くと怒られた思い出
0824デフォルトの名無しさん (ワッチョイ 8a01-ODnH)
垢版 |
2019/11/06(水) 20:51:13.84ID:Fx0hE3mY0
>>821
いやいやいや

文字集合と符号化方式を別々に選択できる状況ならともかく
「ファイル読み取り時のエンコーディング指定」とかの文脈で使うエンコーディングって用語は
狭義の符号化方式だけでなく文字集合も含めた上位の概念だから
0830デフォルトの名無しさん (ワッチョイ 2b14-6wYC)
垢版 |
2019/11/07(木) 02:31:19.18ID:sEmiRyTj0
例えば、Unicodeは文字集合(キャラクタセット、Coded Character Set)で
UTF-8とかUTF-16というのが符号化方式(エンコード、Character Encoding Scheme)

Unicodeも拡張可能でバージョン番号があって文字集合の内容が変わってる。
Unicode 1.0では文字集合の中の文字数は7,161文字
最新のUnicode 12.1では137,929文字も収録文字数が増えてる。

エンコーディングは変わっていないが文字集合は変わってるので
古いバージョンにしか対応してないコンピュータで、
最新のUnicodeを表示させると一部文字化けする

ただし管理団体の手によって収録文字は決められてるので
ShiftJISの頃のような各社バラバラで互換性がないってことにはならない
(ただし私用領域を使ってる場合は除く)
0832デフォルトの名無しさん (ワッチョイ 9f01-vL98)
垢版 |
2019/11/07(木) 08:58:28.91ID:debRpYWr0
>>830
>エンコーディングは変わっていないが文字集合は変わってるので
>最新のUnicodeを表示させると一部文字化けする

じゃ文字集合だけ更新すれば文字化け解消するのかな?
文脈理解せず無意味なレス繰り返してるとそりゃ外字言われるわ
0834デフォルトの名無しさん (ワッチョイ 2b14-6wYC)
垢版 |
2019/11/07(木) 12:52:46.05ID:sEmiRyTj0
正確に言えば、新しい文字集合に対応したフォントを使うとだね。

>>832の言う「文字集合だけ更新すれば」が意味不明だが
「仕様書を更新すれば、なにも変更はいらない」って意味なら
そんなことは誰も言ってない
0836デフォルトの名無しさん (ワッチョイ 9f2c-E8Ce)
垢版 |
2019/11/08(金) 15:49:09.19ID:bNpOstnB0
よく出てくる、&:メソッド名は、proc オブジェクトですが、
たまに出てくる、:メソッド名は、何ですか?

違いが、よく分からない

nums = %w(1 2 3 4).map!( &:to_i ) # 数値の配列

p nums.inject( :+ ) # 10
0838デフォルトの名無しさん (ワッチョイ 9f01-vL98)
垢版 |
2019/11/08(金) 18:26:17.63ID:q9/Fdf+e0
マニュアルの「シンボルの実装と用途」ってところを読むと良いと思う
https://docs.ruby-lang.org/ja/2.6.0/class/Symbol.html

&:to_iも":to_i"がシンボルで、そのシンボルが"&"で修飾されてるだけ
"&"はProcオブジェクトやto_procメソッドを持つオブジェクトをブロックとして渡す時に引数につける修飾記号
実行時にSymbol#to_procが呼ばれてそれがブロックとして渡される
0839デフォルトの名無しさん (ワッチョイ 9f01-vL98)
垢版 |
2019/11/08(金) 18:31:13.82ID:q9/Fdf+e0
mapはシンボルを引数にとらないからmap(&:to_i)でブロックとして渡すけど
injectはシンボルを引数に取るからinject(:+)で実行できる
inject(&:+)としてブロックとして渡してもいいけど無駄処理が入るので普通はやらない
0840836 (ワッチョイ 9f2c-E8Ce)
垢版 |
2019/11/08(金) 18:48:10.88ID:bNpOstnB0
漏れは、いつも、メソッドがシンボルを引数に取るかどうか、分からないから、

ひとまず、map!( :to_i ) みたいに、シンボルを渡して、エラーになったら、
map!( &:to_i ) と、& を付けることにしている
0843デフォルトの名無しさん (ワッチョイ eb14-6wYC)
垢版 |
2019/11/08(金) 23:51:37.33ID:sLgGgSr40
シンボル・・・型が無い言語で、型を気付かれないように書くための手段の一つ

型がないとされる言語でも、123は数字だが、"123"は文字というように
書き方で型をこっそりと記述している。
他にも/abc/は正規表現型、1.0は浮動小数点型などの定義方法がある。
シンボルはその一つで、:で始めることにより、シンボル型の値を書くことができる
0848デフォルトの名無しさん (ドコグロ MM3f-keNo)
垢版 |
2019/11/09(土) 12:03:54.60ID:u1W/mjBNM
>>842
文字列リテラルよりも記述が簡便だからという理由により、本来文字列を使うべき用途にもシンボルが乱用された結果、
シンボルGCなどという頭の悪いものが誕生したりしたんだよな
誰がどう見ても完全に失敗
0849デフォルトの名無しさん (ワッチョイ 9f2c-E8Ce)
垢版 |
2019/11/09(土) 12:04:25.68ID:Ypm9+s0e0
シンボルは、識別子を表すために作られたのか、数字で始められないだろ。
下はエラーになる

p :"1" # OK

p :1 # エラー
0853デフォルトの名無しさん (ワッチョイ 9f01-vL98)
垢版 |
2019/11/09(土) 14:08:02.54ID:MvykJ39t0
>>850
sliceやchunkのような分割系以外は
ブロックがなければEnumeratorを返すのを基本ルールにしてるから
mapはシンボルを取る形がないんじゃないかな

injectはEnumeratorを返すものじゃないから
ちょっと気を利かしてシンボルを取る形を加えたのかもね
0855デフォルトの名無しさん (アウアウカー Sa89-AiI5)
垢版 |
2019/11/14(木) 17:40:11.04ID:BO+nDgNta
Rubyで2値の差を得る簡単なメソッドとかないかな
def diff(num1, num2)
 max = [n1, n2].max
 min = [n1, n2].min
 (max - min)
end
p diff(-3, 7)   #=> 10
とかだと見てくれ良くないし無駄も多い
0861デフォルトの名無しさん (ワッチョイ 9305-CPe6)
垢版 |
2019/11/23(土) 01:26:32.66ID:DazDco060
今月までプログラミングに一切触れたことのなかった初心者です
引数を配列にして
メソッド内で変数aに引数を代入
その後変数aの0番目にnを代入すると引数の0番目まで巻き添えでnになってしまうんですがそういう仕様なんでしょうか?
配列だけで起こる現象のようなんですが
method(0,1)と呼んで
def method(array)
a = array
a[0] = 10
puts a
puts array
end
とするとaもarrayも[10,1]となってしまいます
0862デフォルトの名無しさん (ワッチョイ 9305-CPe6)
垢版 |
2019/11/23(土) 01:27:53.59ID:DazDco060
method([0,1])でした
失礼しました
0864デフォルトの名無しさん (ワッチョイ 9305-CPe6)
垢版 |
2019/11/23(土) 10:59:21.53ID:DazDco060
>>863
ありがとうございます
アドレスの参照先をコピーしてるだけだったんですね
理解しました
調べたところMarshalで書き出せばバイト値もコピーできるようなのでこの方法でいきます
0865デフォルトの名無しさん (ワッチョイ 9301-wiXz)
垢版 |
2019/11/23(土) 14:01:09.34ID:8xX8HZu80
>>864
使い方にもよるのかもしれんが階層が浅くて固定ならdupで十分じゃない?

foo = [[1,2], [3,4], [5,6,7]]
bar = foo.dup

bar[0] = [9,9,9]
foo #=> [[1, 2], [3, 4], [5, 6, 7]]
bar #=> [[9, 9, 9], [3, 4], [5, 6, 7]]

bar[1].push 200
foo #=> [[1, 2], [3, 4, 200], [5, 6, 7]]
bar #=> [[9, 9, 9], [3, 4, 200], [5, 6, 7]]

bar[2] = bar[2].dup.push 300
foo #=> [[1, 2], [3, 4, 200], [5, 6, 7]]
bar #=> [[9, 9, 9], [3, 4, 200], [5, 6, 7, 300]]

階層が深くて手動でdupするのが大変ならdeep_dup

require 'active_support'
require 'active_support/core_ext/object/deep_dup'

baz = foo.deep_dup
baz[1].push 300
foo #=> [[1, 2], [3, 4, 200], [5, 6, 7]]
baz #=> [[1, 2], [3, 4, 200, 300], [5, 6, 7]]
0866デフォルトの名無しさん (ワッチョイ 132c-4eZD)
垢版 |
2019/11/23(土) 20:53:58.93ID:fygFNKSM0
年収は、5大SIer, Java などの土方系・奴隷、多重請負構造では、1社間に入る度に、3割抜かれる!

顧客が100万円払っても、間1 が、30万円抜いて、
自社には70万円で来るので、自分の給料は、25万円ぐらいw

顧客が100万円払っても、間1 が、30万円抜いて、間2 が、20万円抜くと、
自社には50万円で来るので、自分の給料は、20万円ぐらいw

だから、ハローワークのIT 講座でも、奴隷になる2次請け以降に、就職しないように言われる。
Javaの平均年収が600万円なら、300万円の奴隷と、900万円の大企業の奴隷使いがいる。
元々、大企業の人は、給料が良いだけ。
給料は言語に関係ない。労働形態による!

抜きを警戒する人は、派遣なら3割抜かれて、後は自分の給料になるけど、
仕事がない期間の保証がない。
それか、フリーランスのエージェントで、1割ぐらいの抜きを探すか

一方、Ruby などの自社サービス系は、多重請負構造じゃないから抜かれない
0867デフォルトの名無しさん (ワッチョイ 132c-4eZD)
垢版 |
2019/11/23(土) 21:01:37.75ID:fygFNKSM0
C/C++ 以外のほとんどの言語では、参照がコピーされるだけ!
インスタンスを作っていない

だから、実際のインスタンス数は、clone, dup, new された回数を、チェックすれば良い
0868デフォルトの名無しさん (ワッチョイ fb8c-qZD/)
垢版 |
2019/11/23(土) 22:03:14.93ID:uAZdpObm0
土方系の仕事って何ですか
0874デフォルトの名無しさん (ワッチョイ f98f-Sa3v)
垢版 |
2019/11/24(日) 15:33:55.35ID:Gqvqz24c0
要件定義、外部設計を受注できるプライマリの
会社に行かないと高収入はないよ。
内部設計、プログラミングは下流工程だから下請けに流される。

3割抜くとか言うが、粗利3割はどの業界でも普通だし。
0875デフォルトの名無しさん (ワッチョイ fb8c-qZD/)
垢版 |
2019/11/24(日) 18:51:34.90ID:ednGVdun0
言語を知っている。いや知っているだけで金になる仕事はないから
0876デフォルトの名無しさん (ワッチョイ 132c-4eZD)
垢版 |
2019/11/24(日) 23:07:40.54ID:Q5WFFNoW0
上流工程が、下級工程の給料を決める

だから、YouTube で有名なKENTA が、
クライアント側ではなく、サーバー側・構築運用へ行った

今世紀最大の起業家、Ruby でVagrant を作った、
HashiCorp のMitchell Hashimoto も、Go でTerraform を作った!

富・技術革新が集中する所に、Hashimoto は行く!

実際に、車のメーカーの企業の時価総額は変わらないけど、
アマゾン・Google などのサーバー屋は、100兆円企業になってる!
0878デフォルトの名無しさん (ワイーワ2 FF63-KqLj)
垢版 |
2019/11/25(月) 12:33:00.08ID:pjJuONFZF
>上流工程が、下級工程の給料を決める
>クライアント側ではなく、サーバー側・構築運用へ行った

上流ってそういう意味か?ωωω
0879デフォルトの名無しさん (ドコグロ MMe5-5f43)
垢版 |
2019/11/25(月) 16:27:01.28ID:Lb2w9ntUM
Amazonの売上の大半はEC
Googleの売上の大半は広告
どっちも実際には上物で稼いでいて、AWSやGCPの売上比率は15%程度に過ぎない
キチガイの目に映る世界と実態の間にはは大きな乖離があることがわかるだろう
0881デフォルトの名無しさん (ワッチョイ 922c-Ql8R)
垢版 |
2019/11/28(木) 00:37:50.62ID:WsOSEkue0
Windows10, WSL, Ubuntu 16.4 で、
libruby2.3, ruby2.3 の更新が来た!

Ruby2.3 は、もうサポート切れだけど、まだ誰かがサポートしてるw
Ubuntu チームか
0883デフォルトの名無しさん (ワッチョイ 922c-Ql8R)
垢版 |
2019/11/30(土) 04:33:29.25ID:HbGyzSLF0
Vagrant, Chef, RSpec, Serverspec などの、

DSL の書き方だけができる、ライブラリ・フレームワークはないの?
0885883 (ワッチョイ 922c-Ql8R)
垢版 |
2019/11/30(土) 09:10:10.03ID:HbGyzSLF0
環境の構築テストなどを、すごく簡潔に、宣言っぽく書いている

例えば、ファイル・ディレクトリなどを作る場合でも、エラー処理もなく、1行で書いてる。
Maven, Gradle も、こういう宣言っぽい感じかな?

便利だなと思って
0887デフォルトの名無しさん (ワッチョイ 922c-Ql8R)
垢版 |
2019/12/02(月) 22:47:05.03ID:H5nAExhM0
改訂4版 基礎 Ruby on Rails、黒田努・佐藤和人、2018/9/7

この本が、株式会社オイアクス監修だろ。
著者2人は、株式会社ルビキタスにも所属している
0888デフォルトの名無しさん (ワッチョイ 12a5-dfs3)
垢版 |
2019/12/03(火) 09:08:31.07ID:I9YoNGrF0
義務教育にrubyが組み込まれなかった時点でrubyは終わりだろ
ポジション取られたのがscratch

ついでにオブジェクト脳の本の社長起立プログラム、あれ最高にキモイ
0889デフォルトの名無しさん (ワッチョイ 232c-+J45)
垢版 |
2019/12/05(木) 09:12:33.74ID:fTTGdtWT0
Windows のPowerShell で、1-liner で、webrick サーバーを立てるのに、

上だとエラーになって、
下のように、%Q("./") でクォートすると、正常に動くのは、なぜでしょう?

どういうカラクリなの?

ruby -rwebrick -e 'WEBrick::HTTPServer.new(:DocumentRoot => "./", :Port => 8888).start'

ruby -rwebrick -e 'WEBrick::HTTPServer.new(:DocumentRoot => %Q("./"), :Port => 8888).start'
0892889 (ワッチョイ 232c-+J45)
垢版 |
2019/12/05(木) 10:48:53.10ID:fTTGdtWT0
ruby -e 'puts "hello"'
は、コマンドプロンプトではエラーにならないが、
PowerShell ではエラーになるw

ruby -e 'puts %Q("hello")'
は、コマンドプロンプト・PowerShell の両方で正常

ruby -e 'puts "hello"'
が、コマンドプロンプト・PowerShell から、Rubyに渡る際に、どう変換されるのか?

そのカリクリを知りたい
0893デフォルトの名無しさん (アウウィフ FFa9-MVf8)
垢版 |
2019/12/05(木) 10:57:49.63ID:IbmhSLeWF
WSL使え

あるいはWindowsのコマンドプロンプトなら
ruby -e "puts 'hello'"
0895デフォルトの名無しさん (ワッチョイ 7501-MVf8)
垢版 |
2019/12/05(木) 11:21:52.16ID:q0kDwfyl0
製造者がWindowsが憎いMicrosoftが憎いと言ってるのに、わざわざWindows上で使わなくても。
0896デフォルトの名無しさん (ワッチョイ 8333-lxm3)
垢版 |
2019/12/05(木) 21:12:26.41ID:h+M+c6Hd0
コマンドプロンプトのクォート解釈は、控えめに言ってメチャクチャだからな。
昔のものだし、しかたない。

それに比べたら、PowerShellははるかにまともで現代的。
0897889 (ワッチョイ 232c-+J45)
垢版 |
2019/12/05(木) 23:40:17.64ID:fTTGdtWT0
まとめ。
Windows10 で、1-liner のruby -e で順に、1〜3 を実行した場合

1. 'puts "hello"'
2. 'puts %Q("hello")'
3. "puts 'hello'"

1〜3は、コマンドプロンプトと、WSL, Ubuntu 16.04 では、
hello, "hello", hello

PowerShell では、
エラー, "hello", hello
0898デフォルトの名無しさん (ワイーワ2 FF93-MVf8)
垢版 |
2019/12/06(金) 10:14:28.56ID:uUae0oO6F
pythonは””も’’も意味一緒だが
rubyは””と''は微妙に意味違うよな
0899デフォルトの名無しさん (ワイーワ2 FF93-MVf8)
垢版 |
2019/12/06(金) 10:16:15.68ID:uUae0oO6F
'puts %Q(hello)'
あるいは
"puts %Q(hello)"
で良いのに
0900889 (ワッチョイ 232c-+J45)
垢版 |
2019/12/06(金) 12:46:17.58ID:IktivxOB0
>>899
まとめ。
Windows10 で、1-liner のruby -e で順に、1〜2 を実行した場合

1. 'puts %Q(hello)'
2. "puts %Q(hello)"

コマンドプロンプト・PowerShell、WSL, Ubuntu 16.04 のすべてで、
hello
と出力された!
0903889 (ワッチョイ 232c-+J45)
垢版 |
2019/12/06(金) 23:26:41.64ID:IktivxOB0
1-liner を、" " で囲むと「$ \ ` !」などの機能が働くので、
それよりも強いエスケープである、' ' で囲む

' ' で、すべての特殊文字を無効化して、シェルに解釈させないため
0904デフォルトの名無しさん (ワイーワ2 FF93-MVf8)
垢版 |
2019/12/07(土) 14:11:49.26ID:qPdUR/SgF
>>902
``
0906デフォルトの名無しさん (ワッチョイ 232c-+J45)
垢版 |
2019/12/09(月) 06:17:52.14ID:+FpDkG8n0
rdoc の説明を読んでるけど、難しい

皆、自作ライブラリをrdoc用に書いてるの?
0908デフォルトの名無しさん (ワッチョイ 62ad-I3wE)
垢版 |
2019/12/17(火) 13:35:16.51ID:ObjwLX/w0
配列に0から任意の整数を重複なく格納するメソッドを作ってみたんですが、戻り値がnillになってしまいます
どうすれば解決できますか?
def random_sort(array, n)
array = []
judgement_array = [false]
i = 0

while(i < n + 1)
array[i] = rand(n + 1)
k = 0
while(k < i)
judgement_array[k] = array[k] == array[i]
k += 1
end
next if judgement_array.any?
i += 1
end
end

array1 = []
p random_sort(array1, 9)
0909デフォルトの名無しさん (アウウィフ FF3b-uKDx)
垢版 |
2019/12/17(火) 13:41:59.97ID:rApV4krMF
shuffle! shuffle!
0910デフォルトの名無しさん (ワッチョイ 62ad-I3wE)
垢版 |
2019/12/17(火) 14:23:19.78ID:ObjwLX/w0
>>908です
定義の最後の部分で戻り値を記述するのを忘れており
記述したら解決しました
0913デフォルトの名無しさん (ワッチョイ efd2-LrQS)
垢版 |
2019/12/18(水) 17:27:34.36ID:JutxhN8f0
digitsメソッドが返す配列を元の数値に戻すには
自分で計算するしかないのかな
何かついになるメソッドがないかと
探してみたけどわからなかった
0920デフォルトの名無しさん (ワイーワ2 FFdf-yOET)
垢版 |
2019/12/19(木) 12:17:12.46ID:+cpLTGtZF
tpyhonは知らんけどpythonにはnumpyでpackbitsがあるんやで
0921デフォルトの名無しさん (ワッチョイ 9f01-pdcM)
垢版 |
2019/12/19(木) 14:26:11.65ID:snKgfw1x0
>>919

>>914が言ってるのは単なる基数の変換じゃないよ
基数の変換はto_s, to_iに2~36までなら直接渡せるからそれで済ませることが多い
もっと大きい基数が必要になってもinjectやmapで簡単に変換可能だから
いくつかgemあるけど人気ない
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況