Ruby 初心者スレッド Part 59 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/10/02(日) 16:50:38.72ID:kFeo4TbM質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 58
http://echo.2ch.net/test/read.cgi/tech/1458735404/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0153デフォルトの名無しさん
2016/11/05(土) 16:07:31.56ID:3jWRFMI3言語仕様の話を始めたのは俺じゃないし。
言語仕様でなければ実現不可能だろうけど
別に言語仕様である必要はない。
JavaScriptなんて言語仕様になったけれども、対応してないブラウザでも
使えるようにするために、トランスラパイラを文法を変換したりしているからね。
Rubyの世界でもそういう改良版Rubyを使うとかいう方法でもいいのよ。
ようはより短く書く方法を探しているだけ。
0154デフォルトの名無しさん
2016/11/05(土) 16:09:40.54ID:9rWJk3qM>ようはより短く書く方法を探しているだけ。
だったら他の話には反応しなくて良いんだよ
ところでクロージャーみたいなのの話はどうでもいいんだろうか
俺答え損だった?
0155デフォルトの名無しさん
2016/11/05(土) 16:26:05.09ID:3jWRFMI3その答え自体は知ってたけど、
それがRubyでの一番短い書き方だって
わかったので無駄ではないよ。
lambda とか call とかいう単語を
省くことは出来ないのね。
0156デフォルトの名無しさん
2016/11/05(土) 16:34:09.52ID:g4s/HAgH> lambda とか call とかいう単語を
> 省くことは出来ないのね。
だからなに?
質問じゃないじゃん
JavaScriptに有利な例題だけあげてJavaScritpマンセーしてるだけじゃん
そういうのは別スレでやれ
0157デフォルトの名無しさん
2016/11/05(土) 16:36:52.31ID:p7aXJL/r0158デフォルトの名無しさん
2016/11/05(土) 16:57:35.17ID:u9ZZUUBmいつの話だよ
今のRubyはRailsのせいでHashまみれの糞ビッチだよ
0159デフォルトの名無しさん
2016/11/05(土) 17:18:22.74ID:3jWRFMI3> 質問じゃないじゃん
え? 質問は>>149に書いたとおり
クロージャーみたいなのを簡単に書く方法ですが?
なんで質問に対する回答にコメントを
質問だって勘違いしてるの?
それとも回答にコメントしたらいけないって
言いたいのかな?
0160デフォルトの名無しさん
2016/11/05(土) 17:25:06.81ID:3jWRFMI3> JavaScriptに有利な例題だけあげてJavaScritpマンセーしてるだけじゃん
普段JavaScriptで書いていて、JavaScriptでもっと短く書くことができる。
無駄のないコードを書くのが好きなのでRubyでももっと短く書きたい。
Rubyは初心者だが、プログラミングは初心者ではなく検索能力もあるので
Rubyで同等またはRubyの方が短く書くことができるものであれば
大抵はすぐに見つけてしまう。だからそういうものは質問しない。
仮にRubyではそれができないのであれば検索しても見つかるはずがない。
見つかったものは質問しないが、見つからないものは質問するしかない。
だから単に俺が見つけられないものを質問しているだけなんだが、
それが結果的にRubyでは無理なことになってしまってるだけだよ。
0161デフォルトの名無しさん
2016/11/05(土) 17:42:40.29ID:u9ZZUUBm俺は書く位置が気持ち悪くて大嫌いだけどね
Rubyが独立した関数式を持たないのは有名な欠点として昔から言われてることなので、今更言われてもそうだね不便だねとしか
0162デフォルトの名無しさん
2016/11/05(土) 17:55:37.24ID:3jWRFMI3> # 引き数が1つ
> foo = -> ( x ) { x * x }
> foo[ 5 ] # => 25
>
> # 以下のように呼び出すことも可能です
> foo.( 5 ) # => 25
> foo.call 5 # => 25
なんだ。lambdaいらねーじゃん。callいらねーじゃん。
こういうのを教えてくれよ。
> 今更言われてもそうだね不便だねとしか
そんなこと言われてもね。今更Ruby初心者といわれても
始めたばかり。どうしろと?
0163デフォルトの名無しさん
2016/11/05(土) 18:18:33.92ID:9rWJk3qMcallは略せるって上に書いたでしょ
lambdaの方はしらんかったけどたしかにキモいなこれ
callの方も結構ヘンだけど
あと余計なことには反応しなくて良いんだってば
0164デフォルトの名無しさん
2016/11/05(土) 18:20:42.36ID:VSrxz5YGまあ仕事でRubyのプロジェクトに入っただけかもしれないけど。
0165デフォルトの名無しさん
2016/11/05(土) 18:45:31.46ID:M1fQHNFfわかったならPython使え情弱どもが
0166デフォルトの名無しさん
2016/11/05(土) 18:49:13.91ID:szmfxvT7フフッてなったw
0167デフォルトの名無しさん
2016/11/05(土) 19:25:21.38ID:HMFIz/40ってソースに書いておくと
[5,2,3].sort # => [2, 3, 5]
みたいに置き換えてくれるツールがあったら教えてください
0168デフォルトの名無しさん
2016/11/05(土) 22:43:25.54ID:LJBtWuSU0169デフォルトの名無しさん
2016/11/05(土) 22:57:00.73ID:CJv/XjYq0170デフォルトの名無しさん
2016/11/05(土) 23:00:12.07ID:LJBtWuSU#=> NameError: uninitialized constant KurosawaDaiya
駄目でした
0171デフォルトの名無しさん
2016/11/06(日) 00:59:43.52ID:Mq0g4tm50172デフォルトの名無しさん
2016/11/06(日) 03:07:23.22ID:8WadcDvla: data['a'],
b: data['b'],
c: data['c'],
d: data['d']
)
これをもっと短く書く方法を教えて下さい!
0173デフォルトの名無しさん
2016/11/06(日) 09:09:40.26ID:UB8ayWaXEffective Ruby の項目10に書いてあるけど、
構造化データを扱う際、Hashの配列よりも、
クラスまたは、Struct(簡易クラス、クラスジェネレータ)のような専用の型を、使った方がいい
data[:name]
キー名のような実装の詳細が、隠蔽されず表に出てくる。
また、存在しないキーは、nilとなる
Person = Struct.new(:name, :address) #定数に代入
data = Person.new("foo", "fugafuga")
data.name
Structでは属性になるから、getter, setter も付いているし、
存在しない属性名でアクセスすると、NoMethodErrorになる
JavaScript(ES3)では、Hashが無いから、その代わりに、
Objectのプロパティを使っているので、obj.__proto__ という、
たまたま実行環境が使っている、キー名で上書きすると、誤動作する
だから、キーを作る際、__proto__かどうか、チェックしないといけないので不便
0174デフォルトの名無しさん
2016/11/06(日) 09:10:35.91ID:6TZQqHcYRails使ってるなら
foo(data.symbolize_keys)
0175デフォルトの名無しさん
2016/11/06(日) 09:28:36.42ID:rGVVvSQ90176デフォルトの名無しさん
2016/11/06(日) 12:09:01.31ID:8WadcDvldataにはa, b, c, d 以外も含まれているので
それではだめなのです。
0177デフォルトの名無しさん
2016/11/06(日) 13:13:30.71ID:CGfTBBGjslice
0178デフォルトの名無しさん
2016/11/06(日) 13:37:48.19ID:+j3xqinH0179デフォルトの名無しさん
2016/11/06(日) 13:41:52.43ID:6TZQqHcY後出しでそんなこと言われてもねぇ…
そもそも foo で何をやりたいかにもよるし
0180デフォルトの名無しさん
2016/11/06(日) 14:28:52.63ID:8WadcDvlまたなんかあったら聞きます
0181デフォルトの名無しさん
2016/11/06(日) 15:57:30.38ID:6TZQqHcYこういう余計な一言はやめた方がいいよ
0182デフォルトの名無しさん
2016/11/06(日) 16:01:04.07ID:YPGx/bgnあいさつ代わり
0183デフォルトの名無しさん
2016/11/06(日) 18:23:47.88ID:Mq0g4tm5ではこうしたい場合はどうするんでしょう?
class Hoge
attr_accessor(:array, :number)
# いろいろ
end
みたいなClassがあったとして
hoge = Hoge.new
hoge = piyo
としたときにpiyoがどんなものかによって処理を分けたいのです
(具体的にはpiyoがArrayならarrayに入れる、 Hogeと似たようなものならアトリビュートをコピー、とか)
例えばinitialize_copyかなんかを上手く作ればそうなるよみたいな都合のいい話はないですか?
それとも素直にHogeにset(other)みたいなメソッドを定義するべきでしょうか
0184デフォルトの名無しさん
2016/11/06(日) 18:32:02.92ID:NZCpJm/D0185183
2016/11/06(日) 19:02:10.01ID:Mq0g4tm5素直にメソッド作ります
0186デフォルトの名無しさん
2016/11/08(火) 01:53:05.89ID:M6Rn2+Elそもそも動的言語で、型によって分岐するのは、設計がおかしい
ちゃんと設計すれば、継承・インターフェース・ダックタイピングのオーバーロードで、
自然と型による分岐が無くなるはず
0187デフォルトの名無しさん
2016/11/08(火) 03:24:23.45ID:107xoCwk公開おなほ
すとーるまんこはかきたれ
0188デフォルトの名無しさん
2016/11/08(火) 06:17:48.12ID:ykrZTa7U> 会社A
> 担当者BB
> 0002: 取引先:2016/11/07(月) 09:36
> 企業CCC
> 相談人DDDD EEEEEの件で契約
というtxtファイルを
> log=会社A\t担当者BB
> log=企業CCC\t相談人DDDD\tEEEEEの件で契約
という形に置換して出力するバッチを作りたいと思っています。
> Rubyはじめました: rubyでファイルの内容の一部を置換する
http://myruby.seesaa.net/article/125577047.html
こちらを参考に
> f=File.open("input.txt","r:utf-8")
> buffer = f.read();
> p buffer
> # 中身を変換
> buffer.gsub!(/^[\d]{4}\:.*\:[\d]{2}\n/, "log=")
> p buffer
> f=File.open("output.txt","w:utf-8")
> f.write(buffer)
を書いてみたのですが、以下の置換も一つの.rbファイル内で続けて動作させるにはどうすればいいでしょうか
よろしくお願いします
buffer.gsub!(/\n/, /\t/)
buffer.gsub!(/\tlog\=/, /\nlog\=/)
0189デフォルトの名無しさん
2016/11/08(火) 11:49:52.31ID:ZBAGJV1u0190デフォルトの名無しさん
2016/11/08(火) 14:05:34.46ID:LTPhc0210191デフォルトの名無しさん
2016/11/08(火) 14:21:37.68ID:RD7eA5MT0192デフォルトの名無しさん
2016/11/08(火) 14:26:41.88ID:ZBAGJV1uボット
PIM
0193デフォルトの名無しさん
2016/11/08(火) 15:04:04.37ID:LTPhc0210194デフォルトの名無しさん
2016/11/08(火) 16:52:52.70ID:ic1oOtKi0195デフォルトの名無しさん
2016/11/08(火) 19:51:30.63ID:M6Rn2+El> buffer.gsub!(/^[\d]{4}\:.*\:[\d]{2}\n/, "log=")
> p buffer
この後に、
buffer.gsub!(/\n/, /\t/)
p buffer
buffer.gsub!(/\tlog\=/, /\nlog\=/)
p buffer
エラーが起こった際、デバッグしにくいけど、
メソッドチェーンで、どんどんつなげていく事もできる
buffer.gsub!(/^[\d]{4}\:.*\:[\d]{2}\n/, "log=")
.gsub!(/\n/, /\t/)
.gsub!(/\tlog\=/, /\nlog\=/)
0196デフォルトの名無しさん
2016/11/08(火) 19:55:50.26ID:ykrZTa7Uありがとうございます!!!!!!!!!
0197デフォルトの名無しさん
2016/11/08(火) 22:18:28.32ID:ykrZTa7U無事に動きました!
助かりました、ありがとうございます
0198デフォルトの名無しさん
2016/11/10(木) 06:58:06.00ID:MLyRIdhyhashオブジェクトをto_aした場合に返値される配列の順序は
hashオブジェクトにキーを設定した順序でいいのですか?
0199デフォルトの名無しさん
2016/11/10(木) 08:00:08.45ID:+0vOVL7/0200デフォルトの名無しさん
2016/11/10(木) 12:26:51.61ID:Sha7NYgb0201デフォルトの名無しさん
2016/11/10(木) 13:33:15.27ID:dxAJlx690202デフォルトの名無しさん
2016/11/10(木) 14:27:24.56ID:LGdObFSz他の言語では基本順序は保証されていないよね(´・ω・`)
0203デフォルトの名無しさん
2016/11/10(木) 14:47:43.59ID:dxAJlx69>どうゆう理由で
エンジンが変わった
0204デフォルトの名無しさん
2016/11/10(木) 15:04:32.11ID:o6QUnq5t0205デフォルトの名無しさん
2016/11/10(木) 22:33:15.81ID:+0vOVL7/決して、たまたま順序通りになるようなアルゴリズムを選んだとか、
順序通りになるようにハッシュ表の実装を工夫したとかではなく、無理に明示的に順序を持たせてある
0206デフォルトの名無しさん
2016/11/10(木) 23:18:15.82ID:pEVMYV3pHash は順序なし。
Ordered_Hash は追加した順番で、順序あり
0207デフォルトの名無しさん
2016/11/10(木) 23:44:37.48ID:+0vOVL7/RubyのHashは>>205で書いたとおりハッシュ表とは無関係に順序持たせてるし、
.NETのSortedDictionaryみたいに辞書の実装で要素をキーでソートされた状態で持つのはよくあるけど
あれはハッシュ表じゃなくて二分木やバイナリサーチだし
0208デフォルトの名無しさん
2016/11/11(金) 03:16:24.93ID:wVch1D/r例えば下記ってどんなことしてるんでしょうか?
https://github.com/fluent/fluentd/blob/master/lib/fluent/plugin/parser_regexp.rb
def parse(text)
m = @regexp.match(text)
unless m
yield nil, nil
return
end
r = {}
m.names.each do |name|
if value = m[name]
r[name] = value
end
end
time, record = convert_values(parse_time(r), r)
yield time, record
end
yield nil, nil
yield time,record
二つあるけどさっぱりです
0209デフォルトの名無しさん
2016/11/11(金) 07:13:41.60ID:LSv6brFnブロック付きでこのメソッドを呼ぶと、yield のタイミングでブロックが実行される
parse('hoge') { |t, r| p [t, r] }
という風にすると、yield の内容が表示される
0210デフォルトの名無しさん
2016/11/11(金) 08:58:07.26ID:ENznHnYUシンタックスシュガーだからなぁ。
JavaScriptでかけばこんな感じだよ。
a = [1, 2, 3, 4]
forEach(a, function(i) {
return i * 2
})
function forEach(arr, block) {
var ret = []
for (var i = 0; i < arr.length; i++) {
ret[i] = block(arr[i])
}
return ret
}
あとは書き方程度の問題。ブロックが引数の最後の一つである場合に限り
引数のblockコールバックを省略することが出来て、代わりにyieldを使って
そのコールバックが呼び出せるってだけ。
0211デフォルトの名無しさん
2016/11/11(金) 09:55:02.27ID:e7T2VXvj0212デフォルトの名無しさん
2016/11/11(金) 14:39:07.80ID:kzNknik+0213デフォルトの名無しさん
2016/11/11(金) 18:33:52.72ID:+0sZIajyエスパーするとパス通せ
0214デフォルトの名無しさん
2016/11/11(金) 18:58:09.57ID:XRaelh1g返信ありがとうございます。
ruby -vではきちんとバージョンが表示されるのに、helloruby.rbと書くと内部コマンド〜とエラーメッセージが出ます。この場合どのようにしたら良いのでしょうか?自分なりに調べたのですが全く情報が出てこず…。初心過ぎる質問で申し訳ありません。
0215デフォルトの名無しさん
2016/11/11(金) 19:01:01.28ID:UQPlBidt0216デフォルトの名無しさん
2016/11/11(金) 20:13:58.18ID:JZCe9Y2P0217デフォルトの名無しさん
2016/11/11(金) 20:18:26.25ID:UQPlBidt0218デフォルトの名無しさん
2016/11/11(金) 20:55:45.18ID:xrgRbR8m0219101
2016/11/11(金) 21:53:06.05ID:goTatCVE■使用するプログラミング言語/ツール/特殊技術
・Ruby on Rails
・MySQL / PostgreSQLなどのデータベース技術
・Javascript(jQuery)の技術
・サーバ構築、管理の技術(AWS)
・HTML / CSSの技術(ウェブページのコーディング技術)
■月給20万〜
※経験・スキルを考慮のうえ、当社規定により優遇いたします。
※上記給与に、見込残業代35時間分43,000円分を含みます。
(見込残業代 月35時間分を超過した場合は別途支給)
0220デフォルトの名無しさん
2016/11/11(金) 23:39:57.27ID:N42G00o60221デフォルトの名無しさん
2016/11/11(金) 23:46:59.86ID:LSv6brFn0222デフォルトの名無しさん
2016/11/12(土) 03:08:59.71ID:SNnuUkOHしかも手取りですら無いという
これはヤバイわ
0223デフォルトの名無しさん
2016/11/12(土) 03:41:54.01ID:fAGx8Up8RailsでjQuery以外を使おうと思ったら苦難の道で?w
0224デフォルトの名無しさん
2016/11/12(土) 03:52:09.03ID:fAGx8Up8RailsでjQueryの代わりに導入すべきと言われるフレームワークを使おうと思ったら苦難の道やで?
jQueryを含め単なるライブラリ程度であれば簡単に使えるけど
AngularとかReactとかJavaScriptのフロントエンドフレームワークを
組み合わせる方法をRailsは用意していない。
Rails 5でAPIモードというJavaScriptのフレームワークを使う前提のモードができたけれども、
ぶっちゃけこれRailsの便利な機能の多くが非推奨になりましたって言ってるようなもんだからねw
ビューがバッサリなくなって、コントローラーの機能も必要最小限になる。
その分をJavaScritフレームワークで実現するんだけど、Railsにはそれらと組み合わせる機能がかけている。
RailsでJavaScriptのテストはどうやれば良いんだ?レベル。
0225デフォルトの名無しさん
2016/11/12(土) 04:16:39.20ID:eAhK3KJp0226デフォルトの名無しさん
2016/11/12(土) 04:22:33.43ID:6wPviZ3t35時間残業して43,000円にしかならないのか
0227デフォルトの名無しさん
2016/11/12(土) 04:25:14.43ID:6wPviZ3tどうせなんでもjsonで出し入れするんだから
viewなんていらないしrailsである必要すらない
0228デフォルトの名無しさん
2016/11/12(土) 04:33:26.95ID:fAGx8Up8あ、朝?
普段君が何時頃に起きなきゃいけない生活なのかがよく分かるわ。
こっちは会社まで徒歩でも30分。出社時間が一応10時で(基本的に残業なし)
Slackに書くだけで私用を理由に自宅作業したり早く退社してもOK
遅刻とかそういう概念もないんでw
0229デフォルトの名無しさん
2016/11/12(土) 04:36:08.01ID:fAGx8Up8> viewなんていらないしrailsである必要すらない
その通り。Railsの終焉が見えるよねw
ちなみに俺はRubyよりもJavaScriptの方が好き。
メインはJavaScriptで、その背後にあるサーバーは
なんでもいいという時代かな。
0231デフォルトの名無しさん
2016/11/12(土) 05:00:57.16ID:fAGx8Up8世の中にはかわいそうな会社があるねとしか
見てなかったwww
0232デフォルトの名無しさん
2016/11/12(土) 07:15:36.64ID:UXa3WItJだったらなんでRubyスレを覗いてるんだろうか?
嫌いなRubyを叩いて憂さ晴らしをしたいのかな?
0233デフォルトの名無しさん
2016/11/12(土) 07:54:30.01ID:SNnuUkOHもう触るなよ
0234デフォルトの名無しさん
2016/11/13(日) 11:27:30.83ID:8tp89YW7Rubyで機械学習って本書いたら…売れねえか
機械学習や人工知能という神風が吹いて国内でもPythonに完敗なんだろうな
0235デフォルトの名無しさん
2016/11/13(日) 11:52:13.63ID:hnH+OR8d0236デフォルトの名無しさん
2016/11/13(日) 12:15:30.12ID:T5+9PjbVもう勝負は着いてるんだからみっともないことはやめなさい
この国のITはガラパゴス化した技術に拘って世界に取り残されるという失敗をさんざん繰り返してきたというのに、またその例を増やす気か
0237デフォルトの名無しさん
2016/11/13(日) 15:44:25.64ID:e+lvJCbHRubyの棚よりPythonの棚の方が大きくなってた
胸熱
データサイエンティストのみなさんのおかげですωωω
0238デフォルトの名無しさん
2016/11/13(日) 20:44:27.50ID:5YmDMkhP例えば Cなら、 cc hoge.c | ./a.out にすればインタプリタ型になるし、
実行ファイルも残る。
Rubyではコンパイルと実行を分割して実行ファイルを残す方法ってないのかな。
0239デフォルトの名無しさん
2016/11/13(日) 20:59:12.44ID:miyqCymn0240デフォルトの名無しさん
2016/11/14(月) 02:10:30.72ID:XIKx0ys+同じことしているのに ニートの俺には給与ないんだけど・・・
あと最近はSwiftでスマホアプリ作って遊んでる
こんなの仕事でやったら闇落ちしそうなので プログラマとして働くつもりないけど
まぁそれ以前に、実務経験ないから雇ってもらえないねん _(:3 」∠)_=3
0241デフォルトの名無しさん
2016/11/14(月) 04:04:12.28ID:OCTkBwGIすると、C#とかを引っ張り出してくる。Shell感覚で使えたら最高だと思うが
普通はmouseだし、Tool系はTCLだし。
Rubyって主にどういう場面でつかうんだ?
0242デフォルトの名無しさん
2016/11/14(月) 05:24:04.01ID:esjkHDa1ハローワークに、プログラミングを未経験・独学で勉強している人の募集も一杯ある
0243デフォルトの名無しさん
2016/11/14(月) 06:41:55.09ID:aL/Lu1lD今のRubyはRailsのDSLだよ
知らなかったの?
0244デフォルトの名無しさん
2016/11/14(月) 06:55:39.43ID:5ieSClDh刑務所で講習用
0245デフォルトの名無しさん
2016/11/14(月) 07:01:01.48ID:U3HMZCuxUnix 上でちょっとしたことをしたいとき用言語としてよく使うよ
まさに昔の Perl の代替
0246デフォルトの名無しさん
2016/11/14(月) 07:13:45.48ID:aL/Lu1lDPerlの代わりに使うのは厳しいわ
0247デフォルトの名無しさん
2016/11/14(月) 07:37:53.70ID:U3HMZCux手元でやるだけのちょこっとしたことだから、ポータビリティは必要ない
ごく一部の例でいえば、何かが吐き出したlogファイルをサクッと解析させたりとかね
0248デフォルトの名無しさん
2016/11/14(月) 08:03:38.77ID:esjkHDa1SASSも、Ruby
また、設定ファイルとしても読みやすいから、Chef, Puppet でも使われている
「たのしいRuby」など、良本が揃っているから、勉強しやすく、Java, C#ほど難しくない
また、Rubyから静的言語の、Elixir, Haxe, Kotlin などへ移りやすい
0249デフォルトの名無しさん
2016/11/14(月) 10:42:07.67ID:AJSSB3HL>>214です。windows8にruby23-x64を入れました。
helloruby.rbと打つと、
’helloruby.rb’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出ます。
0250デフォルトの名無しさん
2016/11/14(月) 10:42:37.62ID:AJSSB3HL0251デフォルトの名無しさん
2016/11/14(月) 11:01:12.14ID:CNrivUWZrubyは見た目perlに似てるだけでperlの代わりにはならない
0252デフォルトの名無しさん
2016/11/14(月) 11:03:12.46ID:CNrivUWZmingw/msys入れろ
■ このスレッドは過去ログ倉庫に格納されています