Ruby 初心者スレッド Part 55
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/21(土) 23:39:44.94ID:rKd1VvW8質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ
前スレ
Ruby 初心者スレッド Part 54
http://peace.2ch.net/test/read.cgi/tech/1392598207/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0232デフォルトの名無しさん
2014/08/03(日) 14:25:58.16ID:Uv66z7PHISO8601か。数字が続くと区切りにくいし、スペースはいろんなとこで区切り記号として使われているからじゃないか。スラッシュやハイフンも日時ではいろんな使われ方してるし。
0233デフォルトの名無しさん
2014/08/03(日) 15:04:32.71ID:saA9+Ea3プログラム的にわかりやすくてギリギリ可視性もあっていいじゃないか
ちなみにこれもエンドユーザーに直接表示することを目的とはしていない
これをそのまま見せようとするのではなく、自力でどうにかすること
0234デフォルトの名無しさん
2014/08/03(日) 23:38:11.96ID:PzxowcJBuser = "ユーザー名"
password = "パスワード"
みたいな感じで、変数の値を保存させておき次回アクセスがあったらそれを代入させるイメージです。
本来はデータベースなりに保存するのでしょうがあくまでユーザー側に保存させるようにしたいです。
0235デフォルトの名無しさん
2014/08/04(月) 01:09:54.00ID:VTkOlU1X0236デフォルトの名無しさん
2014/08/04(月) 03:21:57.60ID:tnMe/Qjcできるけど、そんなサイト行きたくない。場合によっては悪質なサイトとして晒すレベル。
0237デフォルトの名無しさん
2014/08/04(月) 03:40:50.26ID:Q/8i57D8セッションでやってるんですけどうまく行かないんです。
有効期限も指定してて、firefoxからcookieも見れるのに何故かいつの間にかデータが読み込めなくなってるんですよ。
0238デフォルトの名無しさん
2014/08/04(月) 03:44:49.65ID:Q/8i57D8そこまでですか…
ちなみに理由はどうしてですか
ほとんどファイルサイズないしcookieは色んな所に保存されてるから大丈夫かと思ったんですけどセキュリティ的な問題ですか?
考えてみたんですけどこれくらいしか浮かばなかったのでよければ教えて欲しいです。
0239デフォルトの名無しさん
2014/08/04(月) 03:46:00.08ID:hIaMhHwRそのままやると問題が多すぎる。おそらく、期待としてはCookieStoreが近いと思う
0240デフォルトの名無しさん
2014/08/04(月) 04:13:20.27ID:vzBGIwJJ0241デフォルトの名無しさん
2014/08/04(月) 04:48:08.48ID:tnMe/Qjcセキュリティ上の問題。
それならHTTP digest認証使ったりブラウザに覚えさせた方がまだいい。
他の人が言っているのはセッションキーを使い捨てパスワードとして利用するのと同じ意味になる。
セッションジャックよりパスワードを盗まれる方が被害が大きい。
0242219
2014/08/04(月) 17:03:31.26ID:mXRA9UCQ>>220, >>221, >>222, >>223, >>230 他皆さん
ありがとうございました.大変勉強になりました.
>>223 にある
Time.now.to_s.each_char.take(19).join # 先頭から19文字だけ取り出す
で対応することにしました.
0243デフォルトの名無しさん
2014/08/04(月) 21:26:58.70ID:Q/8i57D8http://d.hatena.ne.jp/shokai/20110324/1300999147
#Rack::Session::Cookie有効
use Rack::Session::Cookie,
:expire_after => 60*60*24*7,
:secret => '適当な文字列'
#代入するとき
session[:user] = 'username'
#読み出すとき
if defined?(session[:user])
user = session[:user]
end
ブラウザ終了がログイン状態が切れるきっかけというわけでもなく時間が立つと切れてます。
0244デフォルトの名無しさん
2014/08/04(月) 21:42:32.94ID:6Tzsw3VWないわw
0245デフォルトの名無しさん
2014/08/04(月) 23:57:26.06ID:XPxSUeR/http://www.amazon.co.jp/dp/B00LUKIEGG/
0246デフォルトの名無しさん
2014/08/05(火) 00:27:04.52ID:Rp7Uk6zW同意。あァァァんまりだァァアァ。
なんでprivateはあるのにsealedは導入しなかったruby。
0247デフォルトの名無しさん
2014/08/05(火) 00:36:33.25ID:mOOeWZK0ないよ
よく調べろ
0248デフォルトの名無しさん
2014/08/05(火) 01:03:45.06ID:52ECpDfa満足かね?
せめてRuby1年生は先生ごっこやめよ
0249デフォルトの名無しさん
2014/08/05(火) 10:33:07.90ID:xop66pugそれで生のCookieの値はどうなってたの?
0250デフォルトの名無しさん
2014/08/05(火) 16:52:55.87ID:n5rHoHG6生のcookieの値というのはfirefoxの「prefenances」>「history」>「show cookie」からcookieを見た時にHostとかPathとかいくつか項目があるところのContentってところに書いてる値をそのまま書けばいいのでしょうか?
あと、他のサイトのcookieはどんな感じになってるのかと思い見てみたところHostという項目がない代わりにDomainがあるサイトがあります。
HostとDomainが両方ともあるというサイトは見かけなかったのですがこれらの違いは何なのでしょうか?
僕のサイトだとHostでした
0251デフォルトの名無しさん
2014/08/05(火) 17:14:48.30ID:9+BWU5QFContentとは別に有効期限ってのがないかな?その値はどうなってるのか。
その値が正しければruby(rack)というよりブラウザ側の問題では?
ブラウザのcookie保存期間の設定は正しく設定されていないとか?
0252デフォルトの名無しさん
2014/08/05(火) 18:13:26.87ID:n5rHoHG6expiresの値は2014年09月04日 16時40分35秒になってます。
コードでも一ヶ月後に設定してたので多分有効期限の設定はうまく行ってると思います。
うまく行かない時もcookie自体は残っているので削除されてるって線は薄そうです。
とりあえず、firefoxでやってたので他のブラウザでも試してみます。
現状なんでうまく行かないのかもわからない状態なので…
0253デフォルトの名無しさん
2014/08/05(火) 18:45:34.68ID:9+BWU5QFあら、cookie残ってるのね。
他のブラウザでも同様であればコード側に原因があるかも。
>>243にある参考ページのサンプルコードがシンプルだから、
そのコードで動作確認してみては?
0254デフォルトの名無しさん
2014/08/06(水) 04:13:53.68ID:/o/64fuk:key => 'rack.session',
:domain => '.の後にdomain',
:path => '/',
:expire_after => 2592000,
:secret => '適当な文字列'
これでやったのですがうまく行きませんでした。
逆にうまく行く時はなんでうまく行くのかと思いキャッシュ消したりとかもやってみたんですが関係無いようでキャッシュを消してもcookieを読み込める時は読み込めて読み込めない時は読み込めないようです。
herokuで動かしてるのですがもしかしたらherokuの設定がうまく行ってないみたいな可能性とかはありませんか?
###### WARNING:
No Procfile detected, using the default web server (webrick)
警告出てたんですが問題なさそうだったので無視してましたし
config.ruにuse Rack::Session::Cookieを書いてるサイトもあったので僕の勝手な憶測ですが
現在のconfig.ruの中身
require './app'
run Sinatra::Application
原因自体つかめていない状態なのでそれを特定する方法の手がかりだけでも知りたいです
0255デフォルトの名無しさん
2014/08/06(水) 04:17:39.98ID:/o/64fukこの内容のProcfileを追加したら消えました。
web: bundle exec rackup config.ru -p $PORT
0256デフォルトの名無しさん
2014/08/06(水) 07:07:48.40ID:9mmp63by0257デフォルトの名無しさん
2014/08/06(水) 07:50:16.81ID:im7I2Tzqherokuとかの環境の情報は始めから出した方が良いと思うよ。
あとローカル開発環境では正しい動作だったのかとか。
問題の切り分けがしづらくて遠回りしてしまう。
herokuでは「use Rack::Session::Cookie」と
「enable :sessions」を同時につかうなみたいな記事あったけど
そのあたりは大丈夫?
0258デフォルトの名無しさん
2014/08/06(水) 12:44:14.10ID:/o/64fukすいません。
環境等先に書いておくべきでした。
えーっと
ブラウザで動くsinatraアプリでweb apiをoauth認証をして使ってtumblr用のサイトを作っているのですがローカルだとあらかじめ入手しておいた自分用のアカウントのキーを定数でおいています。
なのでローカルだと連携アプリを許可するみたいなページを出してoauth認証させる部分を省いて開発しています。
oauth認証の過程がないのでcookieの処理もローカルのものには有りません。
herokuにあげたものがうまく動かないのはcookie周りの処理だけで他はoauth認証とcookieの処理がないローカル版と僕が見たところ同じ動きをしてると思います。
oauth認証の情報が保存されないだけでアカウントがどうこうということはないですけど、こんな状態なのでanalyticsで自分以外の人が来てないと確認しながらやっているのですがanalyticsが残すcookieはうまく動作してそうな感じです。
herokuは無料プランで、アドオンなどは入れていません。
enable :sessionsは大丈夫だと思います
0259デフォルトの名無しさん
2014/08/06(水) 18:33:58.71ID:vbe86AaJ読み込める時と読み込めない時があるようなので
oauth認証のタイムアウトとか考えられるけど
herokuはログにエラーは出すのかね。
0260173
2014/08/06(水) 22:43:28.11ID:9w14YIgy>>188 では、ナゼ可視性(=protected や private の宣言)を使わない
スタイルを好む(個人的な)理由を書いた
その理由の中では:
> スーパクラス-サブクラス間でメソッドを介して関連し、なおかつ
> そのメソッドの外部からの利用を(protectedで)禁止するのが
> 望ましいというケースがほとんど無い(ちょっと思いつかない)
などと書いていたけど、それが間違いだったことに気付いた
ここ数日、標準ライブラリの Ripper.lex を使って、Ruby の
ソースコード解析ツールでの利用を想定した字句解析コードを書いていたのだけど、
試しに protected と private を使ってみたところ割とイイ感じになった
どうやら可視性に関しては、自分の食わず嫌いだったらしい....
http://play.island.ac/codepaste/code?id=1583
他人から指摘されるまで気付かなかった自分が恥ずかしいけど、
まずは指摘してくれたことに対して礼を言う、ありがとん
0261211
2014/08/07(木) 00:41:38.32ID:QaqdPvt4IO(入出力)クラスによると、
Windowsで改行、\r\nを読み込むと、
Rubyインタプリタ内で、\nに変換されて、
またWindowsに出力される時に、\r\nに変換される
つまりRuby内では、\nで統一されている
0262デフォルトの名無しさん
2014/08/07(木) 01:54:36.56ID:UzLKIx83¥rはどして¥nに統一されてないのん?
0263デフォルトの名無しさん
2014/08/07(木) 02:34:40.65ID:EqoC26iFUnixにはそんな仕様は無い
そして、DOSにそれをする必要があったのは自身の改行がCRLFで
C言語はUnix生まれのため改行がLFだったこと
これをMSは、オープン時にテキストモードかバイナリモードかを指定させ
テキストモードならCRLFとLFを変換する、とした
どちらもCRのみ(これは昔のMacの作法)とは関係がないので何もされない
0264デフォルトの名無しさん
2014/08/07(木) 03:05:13.96ID:Os4j55OX0265デフォルトの名無しさん
2014/08/07(木) 04:51:50.32ID:mGC1aKkAクッキーマネージャーはアドオン名でしょうか?
使いかたは自分で調べるのでどの項目や何を見ればいいのかがわからないので良ければ教えてくださいますか?
>>259
500番エラーが出てます
dashboardは投稿一覧みたいのを表示するページでこれは失敗した時のログです。
***は伏せ字です
2014-08-06T19:20:03.092865+00:00 heroku[router]: at=info method=GET path="/dashboard" host=*** request_id=62a8b28e-c1a0-4667-9127-988f2de7f579 fwd=*** dyno=web.1 connect=2ms service=181ms status=500 bytes=1235
うまく行ったときは200番がちゃんと帰ってきてます。
そこで、試しにoauthの情報を定数でおいているローカルの方のファイルをoauthの情報を書かずに実行すると似たようなエラーが帰ってきて
NoMethodError - undefined method `[]' for nil:NilClass:
となりました
heroku logsにも似たようなものが出てたのでやはりうまいことcookeから情報が読めてないのではという気がします
2014-08-06T19:20:03.077945+00:00 app[web.1]: NoMethodError - undefined method `[]' for nil:NilClass:
案の定クッキーはfirefoxから確認できたので何が理由かはわかりませんが何らかの理由で時間が経つとcookieから情報が読めなくなるみたいです。
0266デフォルトの名無しさん
2014/08/07(木) 05:14:08.90ID:mGC1aKkAoperaからも動作確認しようと思ってサイト開いたらどうもfirefoxとログインアカウントの情報が共有されてるみたいです。
firefoxからしかoauth認証(アカウントAで認証)してないのにoperaでも同じアカウント(アカウントAの情報)の情報で出てくる。
逆にoperaから別のアカウント(アカウントB)を認証してfirefoxで開いた時もfirefoxから許可してないのに別のアカウント(アカウントB)の情報で出てくる。
同一LAN上のタブレットから開いてもそうなりました。
意味がわからない…
0267デフォルトの名無しさん
2014/08/07(木) 05:22:45.89ID:mGC1aKkAすいません取り乱しました
そもそも、これがセッションの正しい挙動だったんですね。
sinatraがデフォルトでセッションをクッキーに保存しているというだけで別にセッションはクッキーを使うためのものではないって解釈でいいんですかね?
0268デフォルトの名無しさん
2014/08/07(木) 11:27:41.97ID:qMfbyumEcookieが読み込めないというより
500が帰ってきているから結果的にcookieが読み込めていないってことだよね。
firefoxでcookieが見れるというのは前回成功した時のcookieが見えているだけじゃないかな。
0269デフォルトの名無しさん
2014/08/08(金) 00:35:31.80ID:fc9o1pZf多分解決しました。
どうもクッキーの設定とsinatraのコードそのものの両方が間違ってたみたいでsinatraのコードダメ元で変えてみたら普段ならheroku にデプロイした後は確実にエラーが出るのですがちゃんと通り、半日ほど立ちましたがさっきもログインが持続していることを確認できました。
体系的な知識がなくかなり手こずりましたが皆様のおかげで解決出来ました。
0270デフォルトの名無しさん
2014/08/09(土) 01:57:37.69ID:hZJQ1zja0271デフォルトの名無しさん
2014/08/10(日) 00:10:35.94ID:Npb/3QruSelenium Webdriver、chromeにて
とあるサイトの画像URLを取得、テキストに追記で書き出ししようと色々と調べたのですが全く分からず困っています。
<div class="hoge">
<img src="http://hoge.jpg" alt=""></div>
htmlは上記、xpathは/hoge/imgと仮定します
open("hoge.txt", "a"){|f|
output = driver.find_element(:xpath, '/hoge/img')
f.puts "#{output.text}"
}
のように書いてみたもののテキストに改行しか出力されない状態です
0272デフォルトの名無しさん
2014/08/10(日) 00:30:45.65ID:zlJil821それを書く前に15個くらいスクリプトを作ったはずだ
それは動作したのかどうか言え
もしいきなりそれを作ろうとしたのならあらゆる点で間違っている
いきなり別荘を建てようとするな
まず釘打ってみたり床で組み立ててみたり本棚作ってみたり犬小屋作ってみたりしろ
その経験はひとつも無駄にならない
0273デフォルトの名無しさん
2014/08/10(日) 01:14:37.49ID:Npb/3Qru画面上にテキスト表示されている物はきちんと書き出されました
それで画像urlを取得しようと沢山調べ考えたんですが
今日はもう寝て先程見つけた下を参考にnokogiriにチャレンジしてみようかと
http://d.hatena.ne.jp/toyoshi/touch/20101109/1289294545
ちょっとnokogiri駆使してみたんですが上手く行かなかったような
0274,,・´∀`・,,)っ-○○○
2014/08/10(日) 01:30:50.99ID:ObwJkVu+0275デフォルトの名無しさん
2014/08/10(日) 08:37:49.11ID:frgBbTF30276デフォルトの名無しさん
2014/08/10(日) 09:57:44.18ID:aTEKyeJh0277デフォルトの名無しさん
2014/08/10(日) 11:18:40.68ID:TxwgTDO4取り敢えずjapanize(メニュー日本語化)とConvertToUTF8(sjis文字化け対策)は入れました。
0278デフォルトの名無しさん
2014/08/10(日) 15:06:43.67ID:zOHM5qWJやっとくべき設定?
まずその2つをアンインストールするんだ。
0279デフォルトの名無しさん
2014/08/10(日) 17:01:06.03ID:DcfkR93xエディタ固有の質問は専用スレあるんだから
そっちで聞いたほうがいい
0280デフォルトの名無しさん
2014/08/12(火) 12:59:00.63ID:nam2SDUxprintf で書式指定をするには何を使うのでしょうか?つまり,
printf( "%?", flg )
の ??? には何を指定するのでしょうか?
0281デフォルトの名無しさん
2014/08/12(火) 13:24:35.57ID:ACV8I0vK=> "true"
0283デフォルトの名無しさん
2014/08/12(火) 19:31:50.15ID:PU4N0EB0Rubyでそう言う事したい場合ってドキュメントでカバーするの?
「ポリモーフィズムしたいからこのメソッドはもっとけ」みたいなの
0284,,・´∀`・,,)っ-○○○
2014/08/12(火) 20:28:53.57ID:fcVldYYC実行中にメソッド追加したり削除したりできるくらいだから当然
言語レベルとしてはない。
だがやれんこともない。
http://qiita.com/akisute3@github/items/66bf766166eda2b84a03
Rails的にはテストコードでカバーかね
メソッドが定義されているかはdefined?で確認することができる。
0285デフォルトの名無しさん
2014/08/12(火) 22:29:22.75ID:NtdaG8qe上書きしないと例外投げるだけのメソッド作っとく。
0286デフォルトの名無しさん
2014/08/12(火) 23:31:37.25ID:kLOI0Uwsその考え方がキモい、ということにはなってる
いや常識的に考えて○○ができなきゃオブジェクト指向じゃないだろ、というものの大半は
単に特定の言語、ぶっちゃけJavaとC++、のローカル仕様だったりする
RubyでJavaをやるのはやめようぜ、Rubyなんだし
0287デフォルトの名無しさん
2014/08/12(火) 23:41:51.41ID:x9ZUxVMu0288デフォルトの名無しさん
2014/08/12(火) 23:51:26.48ID:okDd+6G6スクリプトといえども型名等明示できるものは明示できるようにして
ヒューマンエラーを未然に防げるようにしておくのがトレンド
というわけでRuby3はその方向に進化してくれ
0289デフォルトの名無しさん
2014/08/13(水) 00:23:51.87ID:KN2EsXN5残念だけど、「その考え方」は Smalltalk の時代から「よくある言い方」、
いわゆる「イディオム」の一つとして普通に存在している
ちなみに Smalltalk では、>>285 の表現を借りると:
上書きしないと subclassResponsibility メッセージを
投げるだけのメソッド作っとく。
になり、これを Ruby で言い直せば:
上書きしないと例外 SubclassResponsibility を
発生させる(raise する)だけのメソッド作っとく。
になる
さて >>286 に限らず、C++/Java のような静的OOPしか知らない人が
「OO設計の概念は C++/Java から生まれた」みたいな
硬直した発想をしがちなのはナゼなんだろうか?
0290デフォルトの名無しさん
2014/08/13(水) 01:06:25.32ID:OCtuWZt1まじでうっとおしい
0291デフォルトの名無しさん
2014/08/13(水) 01:09:46.40ID:lr+rlGxM被害妄想じゃない?
286のレスからはそうは読み取れないな
硬直した発想だとか言うけど
起源主張して褒められたいという発想自体が
まさにソレじゃね
0292デフォルトの名無しさん
2014/08/13(水) 01:11:07.57ID:TCL9mbxJ僕が初めてオブジェクト志向言語を触ったのはjava/c++だったから! って人が多いから。
Ruby なら、そういう用途に使うために NotImplementedError が組み込みであるから、それを使ってくれというのが言語としてのスタンスってだけの話だと思う。
0293デフォルトの名無しさん
2014/08/13(水) 01:16:16.87ID:0XAF0Eso0294,,・´∀`・,,)っ-○○○
2014/08/13(水) 01:34:10.05ID:K9qjufdc0295289
2014/08/13(水) 02:31:29.89ID:KN2EsXN5「無いのなら作ってしまえホトトギス」ということで、
属性の宣言 attr_reader 等と似た抽象メソッド宣言 abstract_method を書いてみた
http://play.island.ac/codepaste/code?id=1586
abstract_method の使い方は:
・attr_reader 等と同様に、クラス定義内で abstract_method を呼ぶ
・引数は、メソッド名をキー、メソッド引数の個数を値とするハッシュを渡す
・例:abstract_method :foo => 1 # 抽象メソッド foo を宣言
>>290
わざわざ動的OOP言語である Ruby スレで C++/Java との話題を切り出す、
しかも無知に起因すると思われる間違った情報(>>286)をまき散らすのも勘弁願いたい
0296289
2014/08/13(水) 02:43:24.62ID:KN2EsXN5・訂正前
94 # 具象メソッド
95 def foo(message)
96 format "I am a %s.", self.class
97 end
・訂正後
94 # 具象メソッドを利用するメソッド
95 def foo(message)
96 format "I am a %s.", message
97 end
訂正した結果として、実行例も "I am a FOO." になる
0297289
2014/08/13(水) 03:01:19.57ID:KN2EsXN5抽象クラス/抽象メソッドという概念を使いたくない、という
主張だけなら、特に気にしなかった
個人のプログラミングスタイルなんだから他人がとやかく言うべきじゃないし、
Ruby はそういった(良い意味で「お気楽な」)スタイルも許容する認める言語だから
でも >>286 は自分の主張を周囲に押しつけようとし、
しかもその主張の根拠「JavaとC++、のローカル仕様」が間違っているから
厳しい口調になった
言いたかったのは、それだけだ
0298デフォルトの名無しさん
2014/08/13(水) 04:30:45.53ID:lr+rlGxM面白いなw
> 自分の主張を周囲に押しつけようとし
ってのがまさに
> 「継承する時はこのメソッドを実装してね」
これじゃないか。
普通に読み取れば
言語ごとに色が有るんだから
多様性を楽しもうぜってのが286のレスでしょ。
どう読み取ればそうなるんだよ
0299,,・´∀`・,,)っ-○○○
2014/08/13(水) 07:57:49.27ID:K9qjufdcclass Parent
def self.inherited(child)
child.class_eval do
# ここでなんか処理
end
end
end
C++やJavaで純粋仮想関数使いたい意図はわかるが
「ヒャッハー!コンパイル通さないぜ!」やるだけでOO設計やった
気になるのはいかがなものかと。
return 0;
やるだけの関数定義してもシンボル名さえあってれば通っちゃうわけだよね。
お前それでいいのか?
0300289
2014/08/13(水) 11:44:01.65ID:KN2EsXN5たしかに面白いな
・Enumerable モジュールを include する時はメソッド each を実装してね
・Comparable モジュールを include する時はメソッド <=> を実装してね
・あるクラスをハッシュのキーとして扱う時はメソッド eql? と hash を実装してね
・AcriveRecord::Base を継承する時は、DB上に同名のテーブルを定義し、
type というカラムを設けてね
Ruby プログラミングではありふれた決まり事のいくつかだけど、
これらも >>298 には「おしつけ」になるんだろうなぁ.....
うん、たしかに面白い
0301デフォルトの名無しさん
2014/08/13(水) 13:03:40.66ID:XU9wPxJnflg=true;flg.to_s
0302デフォルトの名無しさん
2014/08/13(水) 13:33:34.15ID:TBkS3glifoo:1 ←よい
foo:'bar' ←よい
foo: :bar ←なんかださい
0303デフォルトの名無しさん
2014/08/13(水) 14:47:53.87ID:s6AcBQ2cYAML.dumpで書き出したときに先頭がマルチバイト文字
だと自動的に""で囲まれるようですがこれは確定した仕様なんでしょうか?
ドキュメントに一切記述がなくて不安です。
0304デフォルトの名無しさん
2014/08/13(水) 15:06:48.24ID:KN2EsXN5この話かな?
・Ruby1.9.2で日本語を含むYAMLを出力する時、バイナリ文字列化されないようにする
http://keijinsonyaban.blogspot.jp/2010/10/ruby192yaml.html
0306303
2014/08/13(水) 16:32:59.37ID:s6AcBQ2cそんな感じです。こちらの環境はwindows版2.0でPsychも有効になっているようですが
require 'yaml'
jp = 'あいうえお'
puts(YAML.dump(jp))
#--- "あいうえお"
en = 'abcde'
puts(YAML.dump(en))
#--- abcde
#...
となって日本語のほうだけダブルクォーテーションで囲まれてしまいます。
確定した仕様なら大した問題はないのですがいろいろ調べてると2,3年混乱
が続いたライブラリのようで不安になってきました。使わないほうがいいのでしょうか?
0307デフォルトの名無しさん
2014/08/13(水) 16:45:24.76ID:9nXT2NBI0308289
2014/08/13(水) 21:39:49.42ID:KN2EsXN5使用例として「2次元クラフィック向けの四角形クラス」を書いてみた
http://play.island.ac/codepaste/code?id=1587
これは姉妹スレ「Rubyについて Part49」の #771,772-774 で書いていた
コードを改造母体にして、抽象メソッド宣言やその他の変更を加えたものです
参考まで
0309289
2014/08/13(水) 22:40:38.72ID:KN2EsXN5今さら調べてみると、海外でも似たような議論をしている
・Abstract Method in Ruby - Stack Overflow
http://stackoverflow.com/questions/6792428/abstract-method-in-ruby
ここでも基本は「具象クラスで抽象メソッドが未定義であれば例外を投げる」だけど、
>>289 と同様に Smalltalk ではそれを SubclassResponsibility と呼ぶという
レスが付き、それと類似のコードが提案されている
また、>>295 では抽象メソッド宣言コードを自作してみたけど、
同じ事を考えていた人は海外にもいた
・Creating an Abstract Method | zenspider.com
http://www.zenspider.com/Languages/Ruby/Cookbook/ClassesAndObjects/AbstractMethod.html
>>295 では組込みクラス Module に宣言メソッドを追加していたけど、
こちらの実装では宣言クラス Abstract を定義しクラスメソッド Abstract.method として
抽象メソッドを宣言する API 仕様になっているみたいだ
例えば、任意のクラス定義内で Abstract.method :foo と書く
0310デフォルトの名無しさん
2014/08/13(水) 22:54:28.35ID:KN2EsXN5YAML は使ったことがないのでよく分からんけど、
公式仕様書では最初のドラフト版である 1.0 の時点で
ダブルクォーテーションで囲まれた文字列が定義され、
最新版の 1.2 でも仕様定義に変更はなく安定しているみたいだね
・YAML Ain’t Markup Language (YAML) Version 1.2
http://yaml.org/spec/1.2/spec.html#id2760844
この仕様書の例 "Example 2.17. Quoted Scalars" が該当する箇所
後はライブラリにおける仕様の実装品質を検討することになる
・もし品質が保証された他の手段(他のYAML実装やJSON/XML仕様)が
存在しているなら採用を検討する、あるいは
・とりあえず何か問題が起こるまでは標準ライブラリの利用を継続する
ぶっちゃけた話、どちらを選ぶのが適切かはケースバイケースだから、
後は >>306 自ら最終判断を下すしかないと思う
0311デフォルトの名無しさん
2014/08/14(木) 03:58:05.93ID:+2zwhmMM0312デフォルトの名無しさん
2014/08/14(木) 07:51:44.38ID:/Ffu3gb/0313デフォルトの名無しさん
2014/08/15(金) 04:49:13.30ID:MB8edIwXってできなくて不便なんすけど
ruby2.1でもまだfileに対応してないんスね
0314デフォルトの名無しさん
2014/08/15(金) 05:36:59.12ID:5MJoVvaB=> ["a", "b", "c"]
>> "a\nb\nc\n".split("\n"){|i| puts i}
=> ["a", "b", "c"]
>> "a\nb\nc\n".split("\n").each{|i| puts i}
a
b
c
=> ["a", "b", "c"]
>>
2行目のeachつけ忘れでエラーでないんだけど
Arrayに直接ブロックをぶら下げると何が起こるの?
0315デフォルトの名無しさん
2014/08/15(金) 06:18:06.78ID:11xv4jXV0316デフォルトの名無しさん
2014/08/15(金) 08:26:41.72ID:2ipN4K8/irb> 'abc'.upcase
=> "ABC"
irb> 'abc'.upcase{|x| foo}
=> "ABC"
0317デフォルトの名無しさん
2014/08/16(土) 18:49:31.04ID:ur+z2lZs原書は2013年5月に出版されたようだけど。
0318デフォルトの名無しさん
2014/08/16(土) 19:08:17.04ID:pCqm9jUF翻訳を検討し始めるのではないかと思われ
Ruby 2.2 リリースとの熾烈な競争になるなぁ(棒
0319デフォルトの名無しさん
2014/08/16(土) 19:14:06.94ID:jGqbtnFx0320デフォルトの名無しさん
2014/08/16(土) 21:15:40.19ID:jGqbtnFxbar
end
をもちっとコンパクトに書けんかの
if [1, 2, 3].include?(foo)
bar
end
だとなんかイモい
case foo
when 1, 2, 3
bar
end
もなんかイモい
if foo is 1 || 2 || 3
bar
end
とかかけたらな
0321デフォルトの名無しさん
2014/08/16(土) 21:43:07.02ID:pCqm9jUFコードの可読性が数学における表記法との類似性を指すのであれば:
>> if [1, 2, 3].include?(foo)
が最も類似していると思う
もしコンパクトさを最重要視したいのなら、
Ruby では識別子に UTF-8 文字が利用できるから、
以下のコードを書けばいい
irb(main):001:0> module Enumerable; alias ∈ include?; end
=> nil
irb(main):002:0> [1, 2, 3].∈ 2
=> true
irb(main):003:0> [1, 2, 3].∈ 4
=> false
irb(main):004:0>
(2ch では「∈」という文字が化けている可能性が高いけど、
これは「ある要素が集合に含まれているか」を表す数学の記号)
0322デフォルトの名無しさん
2014/08/16(土) 21:51:29.58ID:A0O6xtGzはRuby的ではないだろ
論理的に合っててシンプルならいいってのはPythonっぽいわ
0323デフォルトの名無しさん
2014/08/16(土) 22:06:29.30ID:pCqm9jUF>>321 では「数学的表記との類似性」という視点でコードを示したわけで、
これが「Ruby的」とは一言も書いていない
だから一体、何に対して過敏に反応しているのか、わけがわからんな
「Ruby的」とか「Rubyっぽい」というのは、>>320 の前半3つの書き方、
そのどれでも受け入れ、その中からどれを選択するかはプログラマに
任せるという「寛容な設計哲学」にある(と、個人的には考える)
これの「Rubyらしさ」は、常にプログラマへ「論理的に合っててシンプルならいい」を
強要する Python とは対照的だね
0324デフォルトの名無しさん
2014/08/16(土) 22:09:16.80ID:xeQ2qkm20325デフォルトの名無しさん
2014/08/16(土) 22:13:46.44ID:ur+z2lZsもっとコードをしっかり読もうよ。
元のコードの一行目はなんか変じゃない?
0326デフォルトの名無しさん
2014/08/16(土) 22:17:39.81ID:pCqm9jUFtypo をいちいち揚げ足取りするほど野暮じゃないんで....
0327デフォルトの名無しさん
2014/08/16(土) 22:23:52.88ID:ur+z2lZsbar
end
foo∈Nなら
0328デフォルトの名無しさん
2014/08/16(土) 23:21:02.64ID:xeQ2qkm2pythonだねw
0329デフォルトの名無しさん
2014/08/17(日) 11:50:17.42ID:C1vhwMQlclass Fixnum
def is(f)
f.call(self)
end
end
def one_of(*them)
return them.first.method(:include?) if them.size == 1
them.method(:include?)
end
foo = 5
bar if foo.is one_of 1,3,5,7
bar if foo.is one_of [1,3,5,7]
bar if foo.is one_of 1..7
0330デフォルトの名無しさん
2014/08/17(日) 16:28:19.29ID:v7smLqH20331デフォルトの名無しさん
2014/08/17(日) 18:27:16.73ID:F9qolS48100人が同じような実装書いたら自動でオリジナルに反映されるクラウド型言語にすれば
車輪の再開発も最小限に抑えられるのに
■ このスレッドは過去ログ倉庫に格納されています