RubyBoolean属性の命名規約および利用
-
13-09-2019 - |
質問
学習rubyなどがある。私の印象でboolean属性名は以下の
my_boolean_attribute?
しかし、構文エラーとなっしなければならない。
class MyClass
attr_accessor :my_boolean_attribute?
def initialize
:my_boolean_attribute? = false
end
end
どうやらrubyのが嫌に"?".この条約の?なぜですか?
解決
編集:三年後に;のは、-changin'...
Julikの回答 は最もシンプルで、一番の問題に取り組むこれらの日
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
私の回答の質問は、下記の子孫...
ハロウィンパーティー:
使用できなくなる問題を、名前のインスタンス変数となります。
のバージョン:
例えば、 attr_accessor :foo
● 単に 概念的には少語の砂糖。
def foo
@foo
end
def foo=(newfoo)
@foo = newfoo
end
また、問題-マーク接尾辞が多くばコンベンションを表示するために、返り値はメソッドはboolean.
最近似できそうですがどのようにいためこちら---
class MyClass
def initialize
@awesome = true
end
def awesome?
@awesome
end
end
この場合、場合もございますの作用 attr_accessor
—後、できるだけ直接boolean属性。一般的に、保存の問題-マーク接尾辞が私の実施を持つメソッドはboolean型の戻り値は少し複雑な条件だけの価値の属性。
感謝!
編集は、年を経て、最近のコメント:
- Rubyの実施を行う一定のネーミングコンベンションに出かけていく。
シンボルをRubyできない。このメソッドの呼び出し編集:正しくない、使用、引用文法のためのシンボル、例えば、:my_boolean_attribute?
両方の失敗とNameError
.:"my_attribute?"
- 記号は不変なので、う割り当てをする
SyntaxError
.
他のヒント
すぐに「質問法」を追加する最も簡単な方法は、あなたのリーダーメソッドのエイリアスを使用することです。
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
attr_accessor
記号は変数名が@my_boolean_attribute
なので、それはあなたが(記号ではない)に設定されなければならないものだということを意味します。
また、あなたが使用することはできませんか?変数のため、ちょうどメソッド名。
? methodnames、いない変数のための規則です。あなたがしたい場合しかし、あなたは@foo?
という名前の変数を使用し、(手動で作成)ゲッターメソッド@foo
に名前を付けることができ、foo?
という名前のインスタンス変数を使用することはできません。
モンキー・パッチ適用メタプログラミング - 多分これが唯一の迅速なドラフトで、よりエレガントにすることができ、私はしばらくの間、メタプログラミングを行っていない...
# inject the convenience method into the definition of the Object class
class Object
def Object::bool_attr(attrname)
class_eval { define_method(attrname.to_s,
lambda { instance_variable_get('@' + attrname.to_s.chop) }) }
class_eval { define_method(attrname.to_s.chop+"=",
lambda { |x| instance_variable_set('@'+attrname.to_s.chop, x) }) }
end
end
### somewhere later
class MyClass
bool_attr :my_boolean_attribute?
def initialize
@my_boolean_attribute = true
end
end
# yet even more later
foo = MyClass.new
bar = MyClass.new
foo.my_boolean_attribute = 1
puts foo.my_boolean_attribute?
puts bar.my_boolean_attribute?
このアプローチを使用すると、乾燥して、あまりにも素敵なquestionmarkを得ることができます。あなただけの "のbool_attr の" より良い名前を選択する必要があるかもしれません、のような "のbool_attr_accessor の" か何か似ています。
私が作ったの定義は、疑問符が元のシンボルに存在するという意味で、ビット不機嫌です。おそらくクリーナーアプローチは、シンボル名にquestionmarkを回避し、メソッドの定義中にそれを追加することです - あまり混乱する必要があります。
。ああ、ほとんど義務リンク含めるのを忘れて:はっきり見メタクラスする