私はさまざまな入力に対して数十のattr_accessorフィールドを含むデータオブジェクトを持っています。どういうわけかクラスを定義して、すべてのフィールドのすべての設定が試行されたnilではなく空の文字列として値を設定しますか?書き込み時にnilを文字列に変換するattr_accessor
答えて
ここで行うにはほとんどのモジュールがありますそれ:
module NilToBlankAttrAccessor
def nil_to_blank_attr_accessor(attr)
attr_reader attr
define_method "#{attr}=" do |value|
value = '' if value.nil?
instance_variable_set "@#{attr}", value
end
end
end
だけでそれを混ぜる:
class Foo
extend NilToBlankAttrAccessor
nil_to_blank_attr_accessor :bar
end
そして、それを使用します。
foo = Foo.new
foo.bar = nil
p foo.bar # => ""
foo.bar = 'abc'
p foo.bar # => "abc"
それは
NilToBlankAttrAccessor#nil_to_blank_attr_accessor
仕組み
は、第1常attr_readerを定義しています
attr_reader attr
次に、アクセッサと同じ名前のメソッドを定義し、最後に "="だけを使用してライターを定義します。だから、属性:bar
のために、方法は、今では、変数を設定する必要があるbar=
define_method "#{attr}=" do |value|
...
end
命名されます。
value = '' if value.nil?
そして、インスタンス変数は実行時まで知られていないインスタンス変数への代入を行うinstance_variable_setを使用します。まず、それが空の文字列にはnilになります。
instance_variable_set "@#{attr}", value
Fooクラスは、クラスメソッドではなく、インスタンスメソッドであることをnil_to_blank_attr_accessorを必要とするので、代わりにinclude
のextend
を使用しています。
class Foo
extend NilToBlankAttrAccessor
...
end
それは 'nil'だけでなく' false'を '' ''に変更します。 – sawa
@sawa、ありがとう。一定。 –
@WayneConradそれは素敵な答えと素晴らしい説明です:) –
代わりの
object.foo = given_input
をやってあなたは
object.foo = given_input.nil? ? "" : given_input
またはあなたにも""
にfalse
をオンにする場合に行う必要があり、その後、
object.foo = given_input || ""
- 1. Java JTextField書き込み中に大文字/小文字に変換する
- 2. 書き込み文字列
- 3. JSONを文字列に変換してファイルに書き込む
- 4. 文字列をタイトルケースに変換する組み込みメソッド?
- 5. データオブジェクトを文字列に変換する際にnilを返す
- 6. はnilを文字列に変換できません
- 7. バイナリファイルを読み込んでバイナリ文字列に変換する
- 8. CSV読み込み時の文字列をタイムスタンプに変更
- 9. 文字列の書き込み方向
- 10. データ文字列をNumPy文字配列に書き込みますか?
- 11. 文字列にnilを暗黙的に変換しない
- 12. csvの読み込み中に文字列をNAに変換する
- 13. 書き込みUnicode文字 -
- 14. リストのリストを縦書きの文字列に変換する
- 15. OpenXMLは値を文字列として書き込み、数値に変換して値を変更します
- 16. 埋め込み文字列配列を配列javascriptに変換する方法
- 17. Apache再書き込みルールのパス区切り文字としてリライト文字列を書き換えます。
- 18. テンポファイルに文字列を書き込む
- 19. PHP書き込み変数と文字列
- 20. Java - 文字列を1行ずつファイルに書き込むか、1行にするか/文字列を文字列に変換できない[
- 21. 日付文字列をNSDateに変換すると常にnilになる
- 22. 秒を読み込み可能な文字列に変換する
- 23. avotoファイルをboto3で読み込み、文字列に変換する(Python)
- 24. データ型を読み込み可能な文字列に変換する方法
- 25. 保存する前に空の文字列をnilに変換する
- 26. rake db:create:すべてのエラー:nilを文字列に変換できません。
- 27. Java - ファイルから文字列を読み込んで配列に変換する
- 28. コンパイル時に文字列を大文字に変換
- 29. UTC時刻文字列をUnix時刻に変換する
- 30. 時間文字列を軍事時刻に変換する
あなたは「未遂nilを」何を意味するのですか? – Linuxios
誰かがobject.foo = nilを試みた場合、実際には変数fooはnilではなく ""に設定されます。 –