如何动态定义实例哈希?
How can I dynamically define an instance hash?
我创建了以下模块:
module SlackHelper
def alert_slack(message)
notifier.ping.message
end
private
def notifier(channel="default")
@notifier[channel]||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + channel]
end
end
以前写的是没有频道的,还行。我得到的错误是:
undefined method `[]' for nil:NilClass
@notifier ||= Hash.new{|hsh, k| hsh[k] = Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + k]}
有了这个,您的哈希被配置为在您访问新密钥时自动构建 Slack::Notifier
。
所以你只需要做:@notifier[channel]
它就会被实例化。
所以你可以摆脱你的私人 notifier
方法并做:
def alert_slack(message,channel='default')
@notifier ||= Hash.new{|hsh, k| hsh[k] = Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + k]}
@notifier[channel].ping message
end
尝试:
def notifier(channel="default")
@notifier ||= {}
@notifier[channel] ||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + channel]
end
我创建了以下模块:
module SlackHelper
def alert_slack(message)
notifier.ping.message
end
private
def notifier(channel="default")
@notifier[channel]||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + channel]
end
end
以前写的是没有频道的,还行。我得到的错误是:
undefined method `[]' for nil:NilClass
@notifier ||= Hash.new{|hsh, k| hsh[k] = Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + k]}
有了这个,您的哈希被配置为在您访问新密钥时自动构建 Slack::Notifier
。
所以你只需要做:@notifier[channel]
它就会被实例化。
所以你可以摆脱你的私人 notifier
方法并做:
def alert_slack(message,channel='default')
@notifier ||= Hash.new{|hsh, k| hsh[k] = Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + k]}
@notifier[channel].ping message
end
尝试:
def notifier(channel="default")
@notifier ||= {}
@notifier[channel] ||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL_' + channel]
end