- ベストアンサー
Classの中のClass定義について
notnotの回答
名前空間ですね。 class Foo class Bar …… end …… end class Hoge class Bar …… end …… end class Bar …… end だと、それぞれの、Barクラスは別物で、それぞれFoo::Bar、Hoge::Bar、Barという名前のクラスになります。ただし、クラスFooの中ではFoo::BarはBarと略記できるし、Hogeの中ではHoge::BarをBarと略記出来ます。 例えば、Fooクラスの中でしか利用しないクラスがあった場合に、他のクラスと名前の衝突を気にすることなく名前を付けることが出来るわけです。ただし、Fooクラス外からもFoo::Barのように利用することが出来るので、Fooクラス内に隠蔽できるわけではないですが。 定数などもクラスの中で定義すれば、Foo::CONSTNAME のような定数が出来ます。
関連するQ&A
- Ruby インスタンス変数@fooを持つClass Fooの中ので関数fooを呼ぶ
#!/usr/bin/ruby def foo(arg) arg.upcase end def bar(arg) arg.upcase end class Foo attr_reader :foo def initialize(arg) @foo = foo(arg) #@foo = bar(arg)とすれば期待した結果が得られる end end f=Foo.new("hoge") puts f.foo 上記実行するとエラーになります。 Class Fooの中のでfooといえば、インスタンス変数@fooであって、関数のfooではないって事なのでしょうか。 インスタンス変数@fooを持つClass Fooの中ので関数fooを呼ぶことはできないのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- Module#method_addedの挙動
すいません、Rubyのドキュメントを見ながら動作を追っていて、疑問に感じたので質問をさせてください。 Module#method_addedというメソッドが追加されたタイミングで動作するメソッドがあります。 定義場所がModuleクラスの中なので、Moduleにメソッドを追加したら、それがmethod_addedを呼び出すと思って試して見たのですが、何故かそうなりません。 何故なのか理由がわからないんですが、教えていただけないでしょうか? ------------------------------------------------------------------ class Object def self.method_added(*_) p self.class.name p __method__ p _ end def self.singleton_method_added(*_) p self.class.name p __method__ p _ end end class Module def self.method_added(*_) p self.class.name p __method__ p _ end def self.slngleton_method_added(*_) p self.class.name p __method__ p _ end end module Foo def self.foo end def foo2 end end class Bar def self.bar end def bar2 end end ------------------------------------------------------------------ 出力結果 ------------------------------------------------------------------ "Class" :singleton_method_added [:bar] "Class" :method_added [:bar2] ------------------------------------------------------------------ 動作環境は、Mac rubyのバージョンは2.4.0です。 ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
- ベストアンサー
- Ruby
- Ruby
#!/usr/local/bin/ruby class Foo def []=(x,y) print "Hello,",x,y,"!\n" end end bar = Foo.new bar["wor"] = "ld" 上記実行結果は Hello world! になるのですが、これが理解できません。 上手く説明してくれませんか?
- ベストアンサー
- その他(プログラミング・開発)
- リフレクションでフィールドのインスタンス取得
リフレクションを使ってフィールドの型やオブジェクトのタイプ、名前などは取得できるのですが、それ自身のインスタンスを取得できません。 ClassオブジェクトのnewInstanceでは、新しく作ってしまうのでだめでした。なにかよい方法はないでしょうか? class Parent{ Foo foo1,foo2; Bar bar; } というクラスでbarからfoo1,foo2のメソッドを呼び出したいのですが、 Fooは何個定義されるかわからない状態です。 Barないでリフレクションを使ってfoo1,foo2をあらわすClassやFieldは取得できるのですが、foo1,foo2自身が取得したいのです。 よろしくお願いします
- ベストアンサー
- Java
- Rubyの関数定義
Rubyで関数を定義し、呼び出すとエラーになります。 sub1() #sub1の呼び出し ・・・ def sub1() ・・・ end のようにすると、エラーになります。 def sub1() ・・・ end sub1() #sub1の呼び出し のようにするとエラーになりません。 関数の定義を呼び出し箇所のソースの後ろで定義してもエラーにならない方法はないのでしょうか。 ご存じのかた、いらしたら教えて下さい。
- ベストアンサー
- その他(プログラミング・開発)
- <div>タグの中の<img>タグのclass属性を削除したい
<div class="center"> .... <img ... class="right" ...> .... </div> とあるソースをperlを使って <div class="center"> ... <img ...> ... </div> というように img タグの class="right" を削除したいです。 <div class="center"> の中にあるimgタグのみ対象としたいのですが、 どうすればよいのでしょうか。 なお、<div class="center"> タグの中には複数の <img ... class="right" .. >タグがある場合もあります。
- ベストアンサー
- Perl
- Rubyのsuperclassメソッドについて
Rubyについての質問です。処理系は1.8.7です。 class Foo def initialize(a) @a = a end end のようなクラスを作成し、そのインスタンスを foo = Foo.new(1) のように作成します。 このとき、 foo.superclassを呼び出すと NoMethodError: undefined method `ancestors' for #<Foo:0x2b691220cc88 @a=1> とエラーになります。 一方で class FooExt < Foo def initialize (a,b) @b = b super a end end のようにFooを継承したクラスを作り、 fooext = FooExt.new(1,2) fooext.superclass とすると => Foo とsuperclassメソッドが動作します。 このsuperclassメソッドはどこで追加されたものなのでしょうか?
- 締切済み
- Ruby
- 親子関係を持つ自作クラスのDownCast
.NET2.0ベースのVBです。次のコードをビルドしようとすると、CTypeの部分がエラーとなり、「変換演算子によって、ある型からその派生型に変換することはできません」とメッセージがでます。派生クラスに対して、ある一定の法則でダウンキャストさせたいのですが、なぜ不可能なのでしょうか。また、このようなアプローチは間違っているでしょうか。 Public Class Class1 ' このクラスは別ファイルに定義されており、 ' そのファイルは ReadOnly。 Public foo Public bar Public baz End Class Partial Class Class1 ' 継承クラスで実装すると、クラス階層構造がより一層複雑になるので、Partial として実装。 ' ダウンキャスト用にキャスト演算をオーバーロード Public Shared Narrowing Operator CType(ByVal value As Class1) As Class2 Dim result As New Class2 ' .foo は移さない! result.bar = value.bar result.baz = value.baz Return result End Operator End Class Public Class Class2 : Inherits Class1 Public hoge End Class
- ベストアンサー
- Visual Basic
- 浮動小数点数の誤差
恐ろしく基本的なこと聞きます。 Public Class himajin100000 Shared Sub Main Dim foo As Double = 0.5 '2進数で表現できる Dim bar As Double = 0.1 '割り切れないから誤差が出る System.Diagnostics.Trace.WriteLine((foo - bar).ToString) '0.4 '・・・あれ?浮動小数点数の誤差どこ行った? End Sub End Class
- ベストアンサー
- Visual Basic
- 関数の書き方について
趣味でプログラムの勉強をしております。 ネットで色々なソースを拝見していると関数の書き方が微妙に異なっているものがあります。 1. int foo(void){ } 2. int foo(void) { } 3. int foo(void) { } 各々のパターンでどのようなメリット・デメリットがあるのかご教示いただければ幸いです。 特に3つ目の関数の型の後に改行をいれる理由がよくわかりません
- ベストアンサー
- C・C++・C#
お礼
名前空間ですか。以前C++の初歩を勉強したときにでてきたのを思い出しました。 > 例えば、Fooクラスの中でしか利用しないクラスがあった場合 このような場合には確かに便利ですね、よくわかりました。 ご回答ありがとうございました。