プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
探検
Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
124デフォルトの名無しさん
2017/09/05(火) 22:33:24.08ID:MbNhWD1A MFC、ATLと続き、Cランタイムまでロードして色々試してまわったけど
構造体を値渡しする関数は自分で作らないとないっぽい
どれもこれもポインターをわたしとった
スマートポインターやインターフェイス、クラスやインスタンス、メンバーやメソッドの扱いなんかも、
DLではちょっと無理そう
こういうのは横着せずラッパー書いてやるしかないと思う
構造体を値渡しする関数は自分で作らないとないっぽい
どれもこれもポインターをわたしとった
スマートポインターやインターフェイス、クラスやインスタンス、メンバーやメソッドの扱いなんかも、
DLではちょっと無理そう
こういうのは横着せずラッパー書いてやるしかないと思う
125デフォルトの名無しさん
2017/09/05(火) 22:58:31.06ID:fnT2eJZH あほくさ。C#使やいいのに。100倍楽だわ
126デフォルトの名無しさん
2017/09/06(水) 00:41:36.28ID:eoNcIyiq な〜にキレてんだよ
不都合なレスでもでもあったのか?
不都合なレスでもでもあったのか?
127デフォルトの名無しさん
2017/09/06(水) 01:26:41.12ID:iI8edc8I >構造体を値渡しする
構造体みたいなサイズが大きいものは、普通、値渡し(コピー)しない
ポインタで渡すとコピーされないから、普通は、ポインタ(参照)渡し
構造体みたいなサイズが大きいものは、普通、値渡し(コピー)しない
ポインタで渡すとコピーされないから、普通は、ポインタ(参照)渡し
128デフォルトの名無しさん
2017/09/06(水) 02:14:32.33ID:eoNcIyiq age
129デフォルトの名無しさん
2017/09/06(水) 10:37:36.24ID:J8xaYq/0130デフォルトの名無しさん
2017/09/06(水) 10:38:56.74ID:ygscOEFy 言っちゃなんだけどバグの元だな
131デフォルトの名無しさん
2017/09/06(水) 10:40:20.14ID:J8xaYq/0132デフォルトの名無しさん
2017/09/06(水) 17:23:37.45ID:0rliz1cq dlでcallack使えるとかはもう出ていて、
今問題になってるのはdlでも構造体の値渡しができるかどうか
>>129
結果、下記ので呼べたけどこれじゃダメなの?
module MODU
〜
関数ロード部分
extern "int WindowFromPoint(int,int)"
〜
end
p MODU.windowFromPoint(x,y)
今問題になってるのはdlでも構造体の値渡しができるかどうか
>>129
結果、下記ので呼べたけどこれじゃダメなの?
module MODU
〜
関数ロード部分
extern "int WindowFromPoint(int,int)"
〜
end
p MODU.windowFromPoint(x,y)
133デフォルトの名無しさん
2017/09/06(水) 18:39:39.83ID:xWkzKu3e みんなffi使ってるからもうその話いいよ
134デフォルトの名無しさん
2017/09/06(水) 19:08:12.67ID:2frueYn2 ん?
荒らしが嫌がるという事は有益なレスなのか
いいぞ、もっとやれ
荒らしが嫌がるという事は有益なレスなのか
いいぞ、もっとやれ
135デフォルトの名無しさん
2017/09/06(水) 19:36:05.78ID:vILuBDeW >>132
たしかに素直な構造体ならいけそうだ。
場合によってはアラインメントとかパディングとかでひっかかりそうだが、回避しきる自信があるのなら、もうそれでもいんじゃね?
オレならさっさと逃げるけどな。
たしかに素直な構造体ならいけそうだ。
場合によってはアラインメントとかパディングとかでひっかかりそうだが、回避しきる自信があるのなら、もうそれでもいんじゃね?
オレならさっさと逃げるけどな。
136デフォルトの名無しさん
2017/09/06(水) 20:19:48.12ID:2frueYn2 単にリファレンスを読んでないだけじゃないのかそれ?
137デフォルトの名無しさん
2017/09/06(水) 23:23:31.25ID:ygscOEFy ↑ユーザー層が良く表れててサイコー
138デフォルトの名無しさん
2017/09/07(木) 03:19:34.26ID:ItXgki7C 133 名前:デフォルトの名無しさん 2017/09/06(水) 18:39:39.83 ID:xWkzKu3e
みんなffi使ってるからもうその話いいよ
134 名前:デフォルトの名無しさん 2017/09/06(水) 19:08:12.67 ID:2frueYn2
ん?
荒らしが嫌がるという事は有益なレスなのか
いいぞ、もっとやれ
135 名前:デフォルトの名無しさん 2017/09/06(水) 19:36:05.78 ID:vILuBDeW
>>132
たしかに素直な構造体ならいけそうだ。
場合によってはアラインメントとかパディングとかでひっかかりそうだが、回避しきる自信があるのなら、もうそれでもいんじゃね?
オレならさっさと逃げるけどな。
136 名前:デフォルトの名無しさん 2017/09/06(水) 20:19:48.12 ID:2frueYn2
単にリファレンスを読んでないだけじゃないのかそれ?
137 名前:デフォルトの名無しさん 2017/09/06(水) 23:23:31.25 ID:ygscOEFy
↑ユーザー層が良く表れててサイコー
みんなffi使ってるからもうその話いいよ
134 名前:デフォルトの名無しさん 2017/09/06(水) 19:08:12.67 ID:2frueYn2
ん?
荒らしが嫌がるという事は有益なレスなのか
いいぞ、もっとやれ
135 名前:デフォルトの名無しさん 2017/09/06(水) 19:36:05.78 ID:vILuBDeW
>>132
たしかに素直な構造体ならいけそうだ。
場合によってはアラインメントとかパディングとかでひっかかりそうだが、回避しきる自信があるのなら、もうそれでもいんじゃね?
オレならさっさと逃げるけどな。
136 名前:デフォルトの名無しさん 2017/09/06(水) 20:19:48.12 ID:2frueYn2
単にリファレンスを読んでないだけじゃないのかそれ?
137 名前:デフォルトの名無しさん 2017/09/06(水) 23:23:31.25 ID:ygscOEFy
↑ユーザー層が良く表れててサイコー
139デフォルトの名無しさん
2017/09/07(木) 23:57:00.12ID:04reamdt 別々のgemなのにrequireする時の名前がかぶってしまって、しかも両方を呼び出す必要がある場合、
どうやってrequireするのが正しいの?
例で、OpenGLのgemがいくつかあるけど、そのうちの二つが"opengl"でrequireする事になっている
どうやってrequireするのが正しいの?
例で、OpenGLのgemがいくつかあるけど、そのうちの二つが"opengl"でrequireする事になっている
140デフォルトの名無しさん
2017/09/08(金) 01:34:25.09ID:3vC4jpKo 問題ないです
名前が衝突することは良くありますが
Rubyはダックタイピングを基調としているので
名前(メソッド名)が同じなら同じような振る舞いをします
たとえ出所が違っていても名前が同じなら同じような振る舞いをします
これがダックタイピングであり
そのようなことはRubyが言語側で保証しているので
プログラマが心配することは有りません
名前が衝突することは良くありますが
Rubyはダックタイピングを基調としているので
名前(メソッド名)が同じなら同じような振る舞いをします
たとえ出所が違っていても名前が同じなら同じような振る舞いをします
これがダックタイピングであり
そのようなことはRubyが言語側で保証しているので
プログラマが心配することは有りません
141デフォルトの名無しさん
2017/09/08(金) 01:39:16.03ID:NantPsUO 質問:どうやって〜するのか?
回答:問題ない
?
回答:問題ない
?
142デフォルトの名無しさん
2017/09/08(金) 03:04:34.55ID:K2jDcQfO ・・・/上のディレクトリ/opengl
となっているのを
・・・/上のディレクトリ/exampl1/opengl
・・・/上のディレクトリ/exampl2/opengl
のように手作業で新しいディレクトリつくってそこに移動させる
で、
require "exampl1/opengl"
require "exampl2/opengl"
みたいな感じで呼び出す、とか
となっているのを
・・・/上のディレクトリ/exampl1/opengl
・・・/上のディレクトリ/exampl2/opengl
のように手作業で新しいディレクトリつくってそこに移動させる
で、
require "exampl1/opengl"
require "exampl2/opengl"
みたいな感じで呼び出す、とか
143デフォルトの名無しさん
2017/09/08(金) 03:19:41.86ID:mcCYyLIS ん、同じrbファイル内でrequireするの?
モジュール名も同じなら1つのモジュールの中に両方入ることになる気がするけど
モジュール名も同じなら1つのモジュールの中に両方入ることになる気がするけど
144デフォルトの名無しさん
2017/09/08(金) 05:59:14.78ID:/QLRsA7o 通常、Load-Pathで最初に見つかったファイルひとつをrequireする
requireはファイルパスつきで指定もできるので、区別できる程度のパスつきで指定すると実質複数読み込める
んでRubyはオープンクラスなのでAA#bbの定義が2回目のrequireで発見されたら2回目ので上書きされる
で、gemに限っては gem 'gemリポジトリ名' で指定して読み込むことができる(これは登録上被らないので)
一般的にはLoad-Path依存という回答
requireはファイルパスつきで指定もできるので、区別できる程度のパスつきで指定すると実質複数読み込める
んでRubyはオープンクラスなのでAA#bbの定義が2回目のrequireで発見されたら2回目ので上書きされる
で、gemに限っては gem 'gemリポジトリ名' で指定して読み込むことができる(これは登録上被らないので)
一般的にはLoad-Path依存という回答
145デフォルトの名無しさん
2017/09/08(金) 15:38:22.30ID:K2jDcQfO モジュール内だけとかにファイルを読み込めれば名前空間的な扱いができそう
requireやloadじゃなく、第三の読み込み方法が必要になるけど
requireやloadじゃなく、第三の読み込み方法が必要になるけど
146デフォルトの名無しさん
2017/09/08(金) 18:13:46.58ID:mcCYyLIS 異なるgemだけどトップレベルのモジュール名が同じものを
一つのrbファイルの中で扱う場合の対処方法として一般的に認知されてるものは無いっぽいね
(別のrbファイル内ならgemコマンドとrequireかな)
loadの第二引数でtrueを渡してAnonymousにしたモジュールに別名を付けるような仕組みがあればいいみたいだけど
loadはAnonymousモジュールを返してくれないから少しtrickyなことをしないと無理
ダサいけどdupして別名で使うのが簡単な気がする
あとはforkしてrenameとかかな
#load_foo.rb
require ‘foo'
Bar = Foo.dup
Object.send(:remove_const, :Foo)
#main.rb
require ‘load_foo’
Bar.something
一つのrbファイルの中で扱う場合の対処方法として一般的に認知されてるものは無いっぽいね
(別のrbファイル内ならgemコマンドとrequireかな)
loadの第二引数でtrueを渡してAnonymousにしたモジュールに別名を付けるような仕組みがあればいいみたいだけど
loadはAnonymousモジュールを返してくれないから少しtrickyなことをしないと無理
ダサいけどdupして別名で使うのが簡単な気がする
あとはforkしてrenameとかかな
#load_foo.rb
require ‘foo'
Bar = Foo.dup
Object.send(:remove_const, :Foo)
#main.rb
require ‘load_foo’
Bar.something
147デフォルトの名無しさん
2017/09/08(金) 20:25:09.24ID:dCkrwQvc でも、違うクラスのほうを見にいって、うまく動作しないはめになりそうだけどな。
148デフォルトの名無しさん
2017/09/08(金) 21:38:34.51ID:K2jDcQfO 適当なモジュールを定義して、
そのモジュールに対してmodule_evalでファイルを評価させるとかどう?
ファイル側はトップレベルでのloadを想定してるだろうから、何らかから派生させたモジュールを用意する必要があると思うけど
kernelだったかmainだったか
で、同名のファイルも別のモジュールでeval
そのモジュールに対してmodule_evalでファイルを評価させるとかどう?
ファイル側はトップレベルでのloadを想定してるだろうから、何らかから派生させたモジュールを用意する必要があると思うけど
kernelだったかmainだったか
で、同名のファイルも別のモジュールでeval
149デフォルトの名無しさん
2017/09/09(土) 08:22:23.23ID:A2Lkc5St ヤフー株式会社が中途採用していたので応募した。
会社半休とって、深夜01時までかけて、写真付き履歴書、職務経歴書(必須提出書類)つくった。
火曜に提出、金曜に不採用通知が来た。
ショック!でもまあ、さすが爆速開発の会社。
まあ、しょうがない。
会社半休とって、深夜01時までかけて、写真付き履歴書、職務経歴書(必須提出書類)つくった。
火曜に提出、金曜に不採用通知が来た。
ショック!でもまあ、さすが爆速開発の会社。
まあ、しょうがない。
150デフォルトの名無しさん
2017/09/10(日) 21:05:31.91ID:16Gqj/Qh RubyはマルチパラダイムなLLって言われるけど、
ほんとどんな書き方でも可能だよな
逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?
ほんとどんな書き方でも可能だよな
逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?
151デフォルトの名無しさん
2017/09/10(日) 21:08:03.14ID:n6o1Bnrv n++
152デフォルトの名無しさん
2017/09/10(日) 21:29:31.42ID:E1NtPZfm パターンマッチ
参照渡し
Null非許容参照型
参照渡し
Null非許容参照型
153デフォルトの名無しさん
2017/09/10(日) 21:31:59.45ID:CfAD8p5O154デフォルトの名無しさん
2017/09/10(日) 22:01:26.40ID:/lqG1P6W >>150
インテリセンスのような、洗練されたIDEサポート。
インテリセンスのような、洗練されたIDEサポート。
155デフォルトの名無しさん
2017/09/10(日) 22:08:47.22ID:pWB+7BVh >>150
なので、他人の読むほうからしたら悪夢のような言語
なので、他人の読むほうからしたら悪夢のような言語
156デフォルトの名無しさん
2017/09/11(月) 03:20:30.57ID:jNI6u+LE こりゃあ自演やってますわ
晒しage
晒しage
157デフォルトの名無しさん
2017/09/11(月) 03:47:13.89ID:uZhmkQHT 嘘をつかないとネガキャンもできないとか、
どんだけこの言語は強力なんだよ
それ程rubyが怖いの?
どんだけこの言語は強力なんだよ
それ程rubyが怖いの?
158デフォルトの名無しさん
2017/09/11(月) 04:39:33.36ID:0SM4UhfV こんなやつらばっかりじゃそりゃpythonに負けるわけだw
159デフォルトの名無しさん
2017/09/11(月) 05:07:13.86ID:VvF2iP9D160デフォルトの名無しさん
2017/09/11(月) 05:26:08.54ID:uZhmkQHT python騙るなボケ
このpythonの恥さらしが
勝利宣言なんか負けですと言ってる様なもんだろ
このpythonの恥さらしが
勝利宣言なんか負けですと言ってる様なもんだろ
161デフォルトの名無しさん
2017/09/11(月) 05:49:53.28ID:qwui3b48 書き方を聞いたんだけど、なんで答えてるレスはどれも同じ様な勘違いしてるの?
もしかして自演するほどRubyが怖い?
もしかして自演するほどRubyが怖い?
162デフォルトの名無しさん
2017/09/11(月) 06:11:35.71ID:6TazFtUw 使えない言語ならそもそもアンチなんて湧かないし
使える言語だからこそ怖いんだよ
使える言語だからこそ怖いんだよ
163159
2017/09/11(月) 06:50:21.08ID:VvF2iP9D164デフォルトの名無しさん
2017/09/11(月) 07:01:29.60ID:6TazFtUw 嘘を付いてまでネガキャンしてる人がいるから言語の話は無理だと思うよ
もうちょっと荒れていない時を見計らったら?
それに、それ、異論がばんばん出そうだし
もうちょっと荒れていない時を見計らったら?
それに、それ、異論がばんばん出そうだし
165デフォルトの名無しさん
2017/09/11(月) 09:25:49.87ID:9tUjHIzk クラスはClassクラスのインスタンスだってのがよく判らん。
Fixnum, String, ArrayもClassクラスのインスタンスだって事らしい。
こんな仕様が一体、何の役に立つんだ?
Fixnum, String, ArrayもClassクラスのインスタンスだって事らしい。
こんな仕様が一体、何の役に立つんだ?
166デフォルトの名無しさん
2017/09/11(月) 09:28:34.16ID:9tUjHIzk インスタンスなのだから、クラスのメソッドをもちろん呼べる。スーパークラスのメソッドも呼べる。
それから、Classクラスのメソッドも呼べる。こういう仕様にしたかったという事なのだろうか?
それから、Classクラスのメソッドも呼べる。こういう仕様にしたかったという事なのだろうか?
167デフォルトの名無しさん
2017/09/11(月) 09:43:53.15ID:9tUjHIzk Classクラスにインスタンス変数を定義すれば、すべてのクラスのクラス変数(Static変数みたいなもん)となる。
class Class
attr_accessor :foo
end
class Foo;end
Foo.foo = 10
puts Foo.foo # => 10
どうやら、こういう事が出来る様になるらしい。
class Class
attr_accessor :foo
end
class Foo;end
Foo.foo = 10
puts Foo.foo # => 10
どうやら、こういう事が出来る様になるらしい。
168デフォルトの名無しさん
2017/09/11(月) 09:50:42.79ID:R+JnAI3g どのサイト見てそういう話になっていっているのか少し気になる
Webサイトは焚書できないからな
Webサイトは焚書できないからな
169デフォルトの名無しさん
2017/09/11(月) 10:03:46.95ID:9tUjHIzk BasciObject, Objectがクラスで
Kernel, Moduleがモジュールだ。
ClassはModuleを継承したクラスだ。Classにあるメソッドは、new, superclassだ。全てのクラスはClassのインスタンスなので、
Foo.new, String.new, Foo.superclass, String.superclassといったクラスメソッドを呼び出す事ができる。
ModuleにはRubyのリフレクション機能を実現するメソッドやeval族がある。
例:nacestors, instance_method, method_defined?
例:class_eval, instance….おっと、instance_evalはBasicObjectにある。
うぅーん。独特な世界観だ。
Kernel, Moduleがモジュールだ。
ClassはModuleを継承したクラスだ。Classにあるメソッドは、new, superclassだ。全てのクラスはClassのインスタンスなので、
Foo.new, String.new, Foo.superclass, String.superclassといったクラスメソッドを呼び出す事ができる。
ModuleにはRubyのリフレクション機能を実現するメソッドやeval族がある。
例:nacestors, instance_method, method_defined?
例:class_eval, instance….おっと、instance_evalはBasicObjectにある。
うぅーん。独特な世界観だ。
170デフォルトの名無しさん
2017/09/11(月) 10:05:04.24ID:9tUjHIzk >>168
みてるのは、『メタプログラミングRuby」第一版。
みてるのは、『メタプログラミングRuby」第一版。
171デフォルトの名無しさん
2017/09/11(月) 10:08:48.21ID:9tUjHIzk あと見ているのは、Ruby 2.0.0 Reference Manual。macOS SierraにはRuby2.0が最初から入っているから、ちょいと古いRubyを使ってる。
Ruby2.2あたりでGCの改良があって、その関係でSecurity重視のWebアプリ作る場合は、2.0はNGらしい。
誤解してる?
Ruby2.2あたりでGCの改良があって、その関係でSecurity重視のWebアプリ作る場合は、2.0はNGらしい。
誤解してる?
172デフォルトの名無しさん
2017/09/11(月) 10:10:47.61ID:OodeiMD8 そういう問題じゃなくて、Webアプリ作るなら実行環境と開発環境をなるべく同じにするのは当たり前。
特にRubyみたいに互換性のいい加減なものを使うなら尚更のこと。
特にRubyみたいに互換性のいい加減なものを使うなら尚更のこと。
173デフォルトの名無しさん
2017/09/11(月) 10:15:39.57ID:hxvjUFQQ webサーバやDSLの主流言語の一つって時点で他の主要言語を繋げて扱える上に手軽だから
使える人が増える事はあっても、減ることは無い
そしてRuby恐怖症患者が恐れているのはこの部分だと思う
使える人が増える事はあっても、減ることは無い
そしてRuby恐怖症患者が恐れているのはこの部分だと思う
174デフォルトの名無しさん
2017/09/11(月) 10:17:31.55ID:9tUjHIzk 俺的ざっくりRubyのバージョンによる違い。
1. 2.0 - 2.1は1.9.3のbugfix版
2. 2.2 - 2.4はGC改良されてるが、言語仕様的には1.9.3と大差無い。
Fixnum, BignumがIntegerに統合された(2.4)とか、String Literalがdefaultでfrozenされている(2.3)とか、細かな仕様変更があるが、俺への影響は無いな。
1. 2.0 - 2.1は1.9.3のbugfix版
2. 2.2 - 2.4はGC改良されてるが、言語仕様的には1.9.3と大差無い。
Fixnum, BignumがIntegerに統合された(2.4)とか、String Literalがdefaultでfrozenされている(2.3)とか、細かな仕様変更があるが、俺への影響は無いな。
175デフォルトの名無しさん
2017/09/11(月) 10:21:25.75ID:9tUjHIzk 俺:昔Ruby1.8 - 1.9.2の頃、WebスクレイピングをRubyでやってた。Mechanizeとか便利だぁ。。。とか言いながら。その頃DSLなんてあまり気にしなかった。
しばらくXcodeばかりいじって居て、Rubyに戻ってきたら2.4になってた。SinatraとかRailsとか触ってみたら、DSLバリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。
しばらくXcodeばかりいじって居て、Rubyに戻ってきたら2.4になってた。SinatraとかRailsとか触ってみたら、DSLバリバリで、これはまずいと感じて、「メタプログラミング」の本読んでます。
176デフォルトの名無しさん
2017/09/11(月) 10:23:03.39ID:9tUjHIzk Rubyの歴史については、en.wikipediaのRuby(programing language)のpageがよく纏まっている。
177デフォルトの名無しさん
2017/09/11(月) 10:29:24.77ID:9tUjHIzk 今後、Ruby2.5, Ruby3.0が予定されているが、3.0の仕様は流動的みたいだ。
1. 並列処理
2. 静的型付け
1は技術的に難しそうだし、2はコミュニティに受け入れられるのか?
1. 並列処理
2. 静的型付け
1は技術的に難しそうだし、2はコミュニティに受け入れられるのか?
178デフォルトの名無しさん
2017/09/11(月) 10:30:38.59ID:R+JnAI3g 反省している
179デフォルトの名無しさん
2017/09/11(月) 10:31:18.51ID:AukiEDF0 >>178
はい
はい
180デフォルトの名無しさん
2017/09/11(月) 10:36:20.19ID:ggzNTq4z181デフォルトの名無しさん
2017/09/11(月) 10:42:25.66ID:9tUjHIzk182デフォルトの名無しさん
2017/09/11(月) 10:43:38.99ID:OodeiMD8 >>180
それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる
それは違う
Rubyのクラスはそれ自体が本当にオブジェクトだけど、
.NETのTypeオブジェクトやJavaのClassオブジェクトはリフレクションのためのハンドルに過ぎず、オブジェクトとは明確に異なる
183デフォルトの名無しさん
2017/09/11(月) 10:48:45.33ID:9tUjHIzk クラス自体を処理の対象にする、ってのは例えばStringクラスのsizeメソッドの仕様が気に食わん。
だったら、俺が好きな仕様に変えてやる!(モンキーパッチング)
って事ができるのは、StringクラスがClassクラスのインスタンスだから出来るってことなのかも。
だったら、俺が好きな仕様に変えてやる!(モンキーパッチング)
って事ができるのは、StringクラスがClassクラスのインスタンスだから出来るってことなのかも。
184デフォルトの名無しさん
2017/09/11(月) 10:56:59.59ID:9tUjHIzk クラス拡張、オブジェクト拡張は
class << self; end
class << obj; end
って感じで行うが、extendメソッドを使ってもできる。
こいつがクラス拡張、オブジェクト拡張のショートカットみたいだ。
class MyClass
extend MyModule
end
こんな感じ。
class MyClass
class << self
include MyModule
end
end
こんな事しなくても良くなる。
class << self; end
class << obj; end
って感じで行うが、extendメソッドを使ってもできる。
こいつがクラス拡張、オブジェクト拡張のショートカットみたいだ。
class MyClass
extend MyModule
end
こんな感じ。
class MyClass
class << self
include MyModule
end
end
こんな事しなくても良くなる。
185デフォルトの名無しさん
2017/09/11(月) 11:14:01.54ID:9tUjHIzk 俺の備忘録、スレ汚しスマソ
aliasを使うとメソッドの再定義ができる。
String#lengthメソッドを再定義して、再定義前の実装をreal_lengthで呼び出せる様に退避させる様にする例。
class String
alias :real_length :length
def length
# anaother implementation
end
end
aliasを使うとメソッドの再定義ができる。
String#lengthメソッドを再定義して、再定義前の実装をreal_lengthで呼び出せる様に退避させる様にする例。
class String
alias :real_length :length
def length
# anaother implementation
end
end
186デフォルトの名無しさん
2017/09/11(月) 11:21:39.37ID:9tUjHIzk aliasを使うと同じ実装を2つの名前で、可視性private/publicをコントロールしながら呼び出したりできる。
class C
def x; “OK”; end
alias :y :x
private :x
end
obj = C.new
obj.y # => “OK”
obj.x # => private methodだから呼べまシェーン。
class C
def x; “OK”; end
alias :y :x
private :x
end
obj = C.new
obj.y # => “OK”
obj.x # => private methodだから呼べまシェーン。
187デフォルトの名無しさん
2017/09/11(月) 12:03:38.85ID:ggzNTq4z188デフォルトの名無しさん
2017/09/11(月) 14:19:18.95ID:VvF2iP9D189デフォルトの名無しさん
2017/09/11(月) 15:26:04.86ID:4atU11H8 うわ、まだこんな言語やってるやついたんだ
endとかきめえ
endとかきめえ
190デフォルトの名無しさん
2017/09/11(月) 15:46:37.43ID:y9RYm9ja 自分が使ってない言語の出来なんかどうでもいいだろ
関係ないんだよ、君には
関係ないんだよ、君には
191デフォルトの名無しさん
2017/09/11(月) 15:51:37.08ID:9tUjHIzk 中かっこで、一行で治るblockを記述し、
do end, class endで複数行に渡るblockを記述する。
class endもblockらしい。
例:
class Foo
puts ‘OK’ # => OK、なんと実行されちゃう!
end
do end, class endで複数行に渡るblockを記述する。
class endもblockらしい。
例:
class Foo
puts ‘OK’ # => OK、なんと実行されちゃう!
end
192デフォルトの名無しさん
2017/09/11(月) 15:53:04.47ID:9tUjHIzk class Bar
attr_accessor :a
end
これもModule#attr_accessorメソッドの呼び出し(引数:a)だって。
attr_accessor :a
end
これもModule#attr_accessorメソッドの呼び出し(引数:a)だって。
193デフォルトの名無しさん
2017/09/11(月) 15:53:50.74ID:9tUjHIzk putsはKernel#putsで定義されている。
194デフォルトの名無しさん
2017/09/11(月) 15:55:48.32ID:9tUjHIzk putsってグローバル関数だと思ってた。Rubyにはグローバル関数ってのは無いのか?
たしか、$fooでグローバル変数だよねぇ。
たしか、$fooでグローバル変数だよねぇ。
195デフォルトの名無しさん
2017/09/11(月) 16:15:12.72ID:I3u+9T/v ID:9tUjHIzkこそRubyを使うのに相応しい人材だ
Rubyはこうでなくてはダメだ
Rubyはこうでなくてはダメだ
196デフォルトの名無しさん
2017/09/11(月) 16:24:37.91ID:9tUjHIzk 試しにやってみた。
class Bar
#attr_accessor :a
attr_accessor “a”
end
puts (Bar.new).a = 3 # => 3
なんと、attr_accessorの引数はputsと同じ様に文字列でもOK!
調子に乗って、
puts :OK
puts :Failed NG # error
puts :”Failed NG”
うぅーん。Symbolと文字リテラルは違うはず。
class Bar
#attr_accessor :a
attr_accessor “a”
end
puts (Bar.new).a = 3 # => 3
なんと、attr_accessorの引数はputsと同じ様に文字列でもOK!
調子に乗って、
puts :OK
puts :Failed NG # error
puts :”Failed NG”
うぅーん。Symbolと文字リテラルは違うはず。
197デフォルトの名無しさん
2017/09/11(月) 17:27:22.55ID:ggzNTq4z >>196
カンマ
カンマ
198デフォルトの名無しさん
2017/09/11(月) 17:28:46.19ID:VvF2iP9D199デフォルトの名無しさん
2017/09/11(月) 18:25:05.46ID:VnfANrEr ネガキャンはとうとう嘘まで付いちゃったか
200デフォルトの名無しさん
2017/09/11(月) 19:01:04.46ID:dKd+OEyf ruby 2.1
WEBrick 1.3.1
Internal Server Error
(erb):58: syntax error, unexpected end-of-input, expecting keyword_end ; _erbout.force_encoding(__ENCODING__) ^
文法エラー、予期せぬend-of-input、keyword_endを待つ;
_erbout.force_encoding(__ENCODING__) ^
って何でしょうか?
WEBrick 1.3.1
Internal Server Error
(erb):58: syntax error, unexpected end-of-input, expecting keyword_end ; _erbout.force_encoding(__ENCODING__) ^
文法エラー、予期せぬend-of-input、keyword_endを待つ;
_erbout.force_encoding(__ENCODING__) ^
って何でしょうか?
201デフォルトの名無しさん
2017/09/11(月) 19:35:28.63ID:503iQjsy 文法エラーだろ。
まずそれを修正すれば。
まずそれを修正すれば。
202デフォルトの名無しさん
2017/09/11(月) 20:12:04.40ID:Se8bNuoM203デフォルトの名無しさん
2017/09/11(月) 20:31:42.69ID:8y57wnUU >>163
確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね
ところで、Python の公式文書には以下の記述がある:
https://docs.python.jp/3/howto/functional.html
>> 複数のアプローチに対応した言語もあり、
>> Lisp, C++, Python はそうしたマルチパラダイム言語です
故に、少なくとも Python は標準で論理型をサポートしていないから、
>>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ
たかだか2chの通りすがりのカキコ(>>150)どころか、
Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒
確かに「Rubyはマルチパラダイム言語である」の明確な反証になっているね
ところで、Python の公式文書には以下の記述がある:
https://docs.python.jp/3/howto/functional.html
>> 複数のアプローチに対応した言語もあり、
>> Lisp, C++, Python はそうしたマルチパラダイム言語です
故に、少なくとも Python は標準で論理型をサポートしていないから、
>>163 の主張は「Python はマルチパラダイム言語である」の反証でもある訳だ
たかだか2chの通りすがりのカキコ(>>150)どころか、
Python様の公式文書にすら堂々と反証してしまう >>163 ってスゲーよなあ(棒
204デフォルトの名無しさん
2017/09/11(月) 20:38:54.64ID:I3u+9T/v >>203
君もRubyとRubyコミュニティーに向いてる人材だな
君もRubyとRubyコミュニティーに向いてる人材だな
205デフォルトの名無しさん
2017/09/11(月) 20:43:18.49ID:wRb7h9Km >>200
endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない
endを期待してるところでendが無いよってエラーだよ
_erbout.force_encoding(__ENCODING__) は
ERB#set_eoutvar内で呼ばれてる処理だけど
今の理解状況なら気にする必要ない
206デフォルトの名無しさん
2017/09/11(月) 20:47:01.81ID:8y57wnUU >>174
自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
自作のRubyで書いたドキュメンテーションツールを日常的に使っているけど、
1.9 で28秒だったのが(ほんの気まぐれで) 2.4 へ変えただけで6秒になった
レスポンスが4倍から5倍変わるのは大きなインパクトだった
付け加えると、こうしてバージュンアップを繰り返してもなお
後方互換性を維持し続けてくれているのはありがたい
(もちろん自作ツールでメタプログラミングといった魔術は使っていないが)
207デフォルトの名無しさん
2017/09/11(月) 20:50:22.49ID:pNAVrMoT >後方互換性を維持し続けてくれているのはありがたい
ナイスジョーク👍
ナイスジョーク👍
208200
2017/09/11(月) 20:55:04.19ID:dKd+OEyf209デフォルトの名無しさん
2017/09/11(月) 21:28:47.33ID:8y57wnUU >>207
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
http://mevius.2ch.net/test/read.cgi/tech/1413113999/126
>ナイスジョーク👍
確かに世の中にはバージョンアップしただけで、たかだか
Hello world すら動かなくなるナイスジョーク👍な言語も存在する(棒
Rubyの設計上の欠点とは何か?
http://mevius.2ch.net/test/read.cgi/tech/1413113999/126
210デフォルトの名無しさん
2017/09/11(月) 22:10:48.79ID:8y57wnUU >>150
>逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?
Ruby と競合するLLで、かつ関数型というパラダイムに限定すれば、
「関数は一級市民ではない」という制限がある
これは Ruby の世界だと「メソッドがオブジェクトではない」と
言い換えることができる
具体的なコードを Python で示そう:
(注:以下は Python を例にしているが、JavaScriptでも同様なコードは書ける)
>>> def add(x, y): return x + y # 関数 add を定義
... ^D
>>> add(1, 2) # 関数へ実引数 (1, 2) を適用
3
>>> f = add # 関数は値(=一級市民)だから、それを別の変数 f として宣言
>>> f(1, 2) # 変数 f へ実引数 (1, 2) を適用しても add と同じ結果になる
3
それに対して Ruby では:
irb(main):001:0> def add(x, y); x + y; end # メソッド add を定義
=> :add
irb(main):002:0> f = add # メソッドは値(=一級市民)ではないから..(略
ArgumentError: wrong number of arguments (given 0, expected 2)
from (irb):1:in `add'
from (irb):2
from /opt/local/bin/irb:11:in `<main>'
>逆に、他の言語で可能だけどRubyじゃできない書き方って何かあるの?
Ruby と競合するLLで、かつ関数型というパラダイムに限定すれば、
「関数は一級市民ではない」という制限がある
これは Ruby の世界だと「メソッドがオブジェクトではない」と
言い換えることができる
具体的なコードを Python で示そう:
(注:以下は Python を例にしているが、JavaScriptでも同様なコードは書ける)
>>> def add(x, y): return x + y # 関数 add を定義
... ^D
>>> add(1, 2) # 関数へ実引数 (1, 2) を適用
3
>>> f = add # 関数は値(=一級市民)だから、それを別の変数 f として宣言
>>> f(1, 2) # 変数 f へ実引数 (1, 2) を適用しても add と同じ結果になる
3
それに対して Ruby では:
irb(main):001:0> def add(x, y); x + y; end # メソッド add を定義
=> :add
irb(main):002:0> f = add # メソッドは値(=一級市民)ではないから..(略
ArgumentError: wrong number of arguments (given 0, expected 2)
from (irb):1:in `add'
from (irb):2
from /opt/local/bin/irb:11:in `<main>'
211デフォルトの名無しさん
2017/09/11(月) 22:53:57.56ID:/+/7clo/ ブロックがオブジェクトじゃないのはほんと糞
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
Rubyは基本的に嫌いじゃないけどこれだけは擁護できないわ
212デフォルトの名無しさん
2017/09/11(月) 23:30:33.81ID:503iQjsy いや、ふつう。
必要であればlambdaにすればよし。
必要であればlambdaにすればよし。
213デフォルトの名無しさん
2017/09/11(月) 23:51:41.69ID:dZxzu+uY214163
2017/09/12(火) 00:16:04.48ID:EWvqPynr215デフォルトの名無しさん
2017/09/12(火) 00:26:02.80ID:FDETfUWp メソッド呼び出し時の括弧をオプショナルにしてるから
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
f = add みたいなのは出来ないよね
でもそういう使い方をするときはメソッドじゃなくProcオブジェクト使う
だからObject#methodを実際のコードで使ったことはない
216デフォルトの名無しさん
2017/09/12(火) 00:37:53.72ID:JOxdLua/ 俺が質問したのは書き方
Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能、ワンライナーやダックタイピング、メタプログラミングも書ける
だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど
Rubyは純オブジェクト指向で書けるし、関数言語的な書き方も可能、ワンライナーやダックタイピング、メタプログラミングも書ける
だから逆に他の言語で実用的な書き方を挙げてほしかったんだけど
217デフォルトの名無しさん
2017/09/12(火) 01:09:50.45ID:HQWpPXKt n++
218デフォルトの名無しさん
2017/09/12(火) 01:10:31.53ID:HQWpPXKt rubyの連中は、初心者、日本人をバカにするからきらいだ
219デフォルトの名無しさん
2017/09/12(火) 01:11:34.30ID:HQWpPXKt マルチパラダイムの言語をしらべればいいだろ
D, pike, いろいろある
D, pike, いろいろある
220デフォルトの名無しさん
2017/09/12(火) 01:12:37.06ID:K8M+GTE7 >>215
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
何でそんな言い訳がましい書き方すんの?
defで宣言した関数は変数に代入出来ない。そのような場合はProcを使う必要がある。この行き当たりばったりな仕様は関数を第一級オブジェクトとして扱える言語が流行ってきたため「る、rubyでもできるし!」と言いたいがために適当に実装したためである、ってスパっと言えよ。
221デフォルトの名無しさん
2017/09/12(火) 01:15:08.18ID:EWvqPynr222デフォルトの名無しさん
2017/09/12(火) 01:19:06.28ID:TH/zNQOA 思い込みで嘘振りまいてたアンチが発狂しとる
223デフォルトの名無しさん
2017/09/12(火) 02:14:24.98ID:FDETfUWp■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【悲報】おこめ券、9.5億円配布分のうち2.4億が経費、うちJAが1億円中抜き🤗高市ありがとう [359965264]
- AV女優さん「時間停止物」のAVを完全否定してネット騒然。お前らの夢が1つ潰える [152212454]
- 【悲報】高市有事で日本に同調する国、1つも現れないwwwwwwwwwwwwwww [603416639]
- 自閉症が「んなっしょい」と連呼するお🏡
- FGOで好きなサーヴァントがアビゲイル、北斎、楊貴妃なんだが
- (´・ω・`)おはよ
