- Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
571 :西行寺うゆ ◆e6.oHu1j.o [sage]:2015/10/29(木) 10:29:29.44 ID:R4RgirF7 - 初めましての方は初めまして 西行寺 うゆと申します
rubyって自由度が高いといわれていますけれど >>569このような事をやる場合に、結局ネックになるのは 「クラス」には存在して「モジュール」には存在しない機能です extended , includedが呼び出し側から引数を取れないのは何故ですか? それでも無理やりにmoduleのextendedをinitializeの代わりにプログラミングしていった先にあるひとつの壁は extendedが「引数を取れない事」と「super」を呼べない事です このせいで結局「クラスにラップされたモジュール」というのが、コード上の冗長性を抜きにした場合 最も効果的な手段となってしまいます しかしながら他にも問題はあります ラ イ ブ ラ リ の ほ と ん ど は ク ラ ス で 提 供 さ れ て い る o = Object.new o.extend Module よってこの記述は、モジュールだから出来ているだけで o.extend Class は出来ないです
|
- Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
572 :西行寺うゆ ◆e6.oHu1j.o [sage]:2015/10/29(木) 10:30:53.39 ID:R4RgirF7 - よってextend Module型のプログラミングを、rubyが可能だとしても出来ないんです
その場合 o = Object.new o.extend Module.new { attr_accessor :mod } o.mod = Lib_Class.new このような形になってしまいます これって結局「自由なプログラミング言語」と謳っていても、 結局「クラスを使った"常識的なプログラミング"」の中だけの「自由」なんです 実際classではなく module extended式のプログラミングをしてみるとわかりますが moduleのスコープとmodule内特異クラスの最低でも2つ以上のスコープを意識しながら組む事になります このスコープは「カプセル化」の恩恵を与えてくれるものではなく、ただ煩雑にさせるだけのスコープです よって @var = 1 def self.extended | mod | @ var end def func @var # error end klassの違いからなる制約が頻発します
|
- Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
573 :西行寺うゆ ◆e6.oHu1j.o [sage]:2015/10/29(木) 10:31:19.88 ID:R4RgirF7 - なので、このような煩雑なklassスコープを意識しながら組むよりは
var = 1 self.define_singleton_method :extended do | mod | p var mod.define_singleton_method :func do p var end end と、書いてしまったほうが、明らかにわかりやすいです extended プログラミングの中では 「 def 」を使わずに一見冗長define_singleton_methodを使ったほうがまだマシなように思います @つきメンバ変数を使わず ローカル変数スコープを全てのmodule内の定義メソッドで突っ切らせたほうが、簡潔になります 先にも言いましたが、extend extended は引数を得られない これってユーザー引数によって、extendedからメソッドを「追加」ではなく「定義」しようと思った時に 無理なんです extendの利用価値がガタ落ちじゃないですか? 「引数」ではなく、内部変数等の「状態保存」だけならできます extend でメソッドを作っても、 「引数」ではなく、内部変数等の「状態保存」%まで% しか出来ない、
|
- Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
574 :西行寺うゆ ◆e6.oHu1j.o []:2015/10/29(木) 10:32:37.79 ID:R4RgirF7 - そしてそれを打開するために、このようにしました
o.extend My_module_rappar_class.new("extendedで使いたい引数").new.module ## My_module_rappar_class#module # => #<Module:0x0000FF0> rubyのシンタックスシュガーの外に出た感じです 参道から外れて獣道に入ったようなイメージ 自分の通ろうとしている獣道をruby言語で開拓していただけませんか? 自分が欲しい機能を以下に並べます アジェンダ ・extend で「引数に沿ってメソッド生成・メソッド定義」が可能なモジュール機構 これが出来ない時点で、基本的には状態保存をしないで済むメソッドの追加しかextendでは出来ない制約があります ・ライブラリがクラスで作られていても容易にextendが可能な機能 これは「o.extend Module.new { attr_accessor :mod }」のひと手間かければ良いのですが この二つです では、何か質問等ございましたら http://peace.2ch.net/test/read.cgi/tech/1443578172/l50 こちらまでメールをお願いします
|
- ゲームプログラムなら俺に聞け32©2ch.net
437 :デフォルトの名無しさん[]:2015/10/29(木) 10:53:39.94 ID:R4RgirF7 - ネタにマジレス
言語を使えると使いこなせるの間に差があるから 「使いこなせる」までに至った言語じゃないと大規模なコードは書けないから 「jsを使いこなせる」奴がそもそも少ない上に それから動的言語で組める奴がさらに少ない
|
- 【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net
388 :うゆはら ◆e6.oHu1j.o []:2015/10/29(木) 15:51:13.08 ID:R4RgirF7 - x = loop.lazy.map do
p 1 end x.next 1 ↑ わかる -------------------------------------- x = loop.lazy.each do p 1 end x.next 1 1 1 1 1 1 1 1 ... ↑ わからない --------------------------------------
|
- 【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net
390 :uy ◆e6.oHu1j.o []:2015/10/29(木) 21:45:22.89 ID:R4RgirF7 - ARGV << nil
ARGF.each{} はいSEGVきましたー。 普通にruby使ってるだけでどんどんBUG出てくる
|