【发布时间】:2019-04-01 12:19:07
【问题描述】:
我在a library 中有以下代码,有人可以解释以下代码中的代码(“#{k}=”)是什么意思吗?
if respond_to?("#{k}=")
public_send("#{k}=", v)
else
raise UnknownAttributeError.new(self, k)
end
我知道 respond_to 是 Ruby 中的默认函数,但没有给出此语法的定义/解释,请帮助我们。
编辑:
我得到了上述代码的异常(unknown attribute 'token' for PersonalAccessToken. (ActiveModel::UnknownAttributeError))
/opt/gitlab/embedded/lib/ruby/gems/2.5.0/gems/activemodel-5.0.7.1/lib/active_model/attribute_assignment.rb:40:in `block in _assign_attributes'
/opt/gitlab/embedded/lib/ruby/gems/2.5.0/gems/activemodel-5.0.7.1/lib/active_model/attribute_assignment.rb:48:in `_assign_attribute': unknown attribute 'token' for PersonalAccessToken. (ActiveModel::UnknownAttributeError)
所以将 k 视为“令牌”,在哪种情况下我会得到异常(在哪种情况下它会进入 else 状态?)
【问题讨论】:
-
请添加到库的名称,如果可以,请添加有关该代码段的链接。
-
这是一个带有插值的随意string literal:如果
k是"foo"(或:foo),那么"#{k}="的计算结果为"foo="。 -
这是一个纯 Ruby 问题,所以它不应该有 Rails 标记。
-
如果
k = "foo",第一行将显示,“如果默认接收者self响应'foo='方法”。respond_to的参数可以是字符串或符号 (:foo=)。见Object#respond_to?。 -
@CarySwoveland 请检查已编辑的问题
标签: ruby-on-rails ruby ruby-on-rails-3 rubygems