トップページ > プログラム > 2015年10月29日 > R4RgirF7

書き込み順位&時間帯一覧

3 位/155 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000500001000001007



使用した名前一覧書き込んだスレッド一覧
西行寺うゆ ◆e6.oHu1j.o
デフォルトの名無しさん
うゆはら ◆e6.oHu1j.o
uy ◆e6.oHu1j.o
Ruby 初心者スレッド Part 57©2ch.net [転載禁止]©2ch.net
ゲームプログラムなら俺に聞け32©2ch.net
【JavaScript】スクリプト バトルロワイヤル52【php,py,pl,rb】 [転載禁止]©2ch.net

書き込みレス一覧

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出てくる


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。