あなたはヘルパーメソッドを書くことができます:
def theme_color(name)
return unless name
return unless @theme.respond_to?(name)
@theme.public_send(name)
end
def example_method(obj)
ExampleClass.new(color1: theme_color(obj['color1']))
end
theme_color
戻りnil
を引数は、すなわち、obj['color1']
nil
ある場合。また、theme
が所定のメソッドに応答しない場合はnil
を返します。それ以外の場合は、name
で指定されたメソッドを呼び出します。
respond_to?
とpublic_send
には文字列または記号のいずれかを使用できるので、to_sym
は不要です。
また、あなたの@theme
クラスのインスタンスメソッドとしてヘルパーメソッドを定義することができます。
class Theme
def color(name)
return unless name
return unless respond_to?(name)
public_send(name)
end
def red
'FF0000'
end
end
@theme = Theme.new
@theme.red #=> "FF0000"
@theme.color(:red) #=> "FF0000"
@theme.color('red') #=> "FF0000"
@theme.color('green') #=> nil
@theme.color(nil) #=> nil
を介して、それを起動します。これらのアプローチは、(使用していることを覚えておいてください
def example_method(obj)
ExampleClass.new(color1: @theme.color(obj['color1']))
end
public_send
またはtry
)は、@theme
オブジェクトで任意のメソッドを呼び出すことができます。色をハッシュで保つ方が安全かもしれません。
エラー 'TypeError:nilは記号でも文字列でもない' – Cameron
この例では、 'obj ['color1']'はnilになります。だから私たちは試しに何も渡さないだろう。 – Cameron
それでは、参照しているobjがnilのときはどうすれば処理できますか?私がクラスに渡すためにテーマのシンボルとして呼びたいと思っています。 – Cameron