Ruby 这条红宝石线是怎么说的?
我正在使用一个自定义渲染器,我使用了一些来自另一个站点的复制粘贴。我似乎不知道这件作品在这里做什么Ruby 这条红宝石线是怎么说的?,ruby,syntax,operator-keyword,Ruby,Syntax,Operator Keyword,我正在使用一个自定义渲染器,我使用了一些来自另一个站点的复制粘贴。我似乎不知道这件作品在这里做什么 "#{options[:callback]}(#{data})" 下面是完整上下文中的一段代码 ActionController.add_renderer :as3 do |data, options| data = ActiveSupport::JSON.encode(data) unless data.respond_to?(:to_str) data = "#{opti
"#{options[:callback]}(#{data})"
下面是完整上下文中的一段代码
ActionController.add_renderer :as3 do |data, options|
data = ActiveSupport::JSON.encode(data) unless data.respond_to?(:to_str)
data = "#{options[:callback]}(#{data})" unless options[:callback].blank?
self.content_type ||= Mime::JSON
self.response_body = data
end
这是简单的字符串插值。它将生成如下字符串,
callback
是options[:callback]
的值,value
是变量数据中的任何内容
"callback(value)"
在Ruby中,双引号字符串通过{}
语法支持插值。也就是说,如果变量x
包含值3
,则字符串“x的值为#{x}”
将计算为“x的值为3”
。在#{}
中,可以有任意复杂的Ruby表达式,包括数组/哈希索引。因此,字符串的第一部分,“{options[:callback]}”
只是将options[:callback]
的值替换到字符串中
下一部分,()
只是原始字符串数据,而不是可执行代码。在()
中,您有第二个{}
替换数据。如果用x
和y
替换这两个变量取代基,可能会更清楚:
x = 3
y = 4
"#{ x }(#{ y })"
以上内容将计算为字符串“3(4)”
这是简单的字符串插值。它将生成如下字符串,callback
是options[:callback]
的值,value
是变量数据中的任何内容
"callback(value)"
在Ruby中,双引号字符串通过{}
语法支持插值。也就是说,如果变量x
包含值3
,则字符串“x的值为#{x}”
将计算为“x的值为3”
。在#{}
中,可以有任意复杂的Ruby表达式,包括数组/哈希索引。因此,字符串的第一部分,“{options[:callback]}”
只是将options[:callback]
的值替换到字符串中
下一部分,()
只是原始字符串数据,而不是可执行代码。在()
中,您有第二个{}
替换数据。如果用x
和y
替换这两个变量取代基,可能会更清楚:
x = 3
y = 4
"#{ x }(#{ y })"
上述内容将计算为字符串“3(4)”
,这是将JSON响应转换为JSONP;想象一下数据是:
'{"some": "thing", "goes": "here"}'
JSONP声明数据应该包装在JavaScript函数调用中。因此,如果选项[:callback]
是字符串test
(要调用的函数的名称),则生成的JSONP将是:
'test({"some": "thing", "goes": "here"})'
这是将JSON响应转换为JSONP;想象一下数据是:
'{"some": "thing", "goes": "here"}'
JSONP声明数据应该包装在JavaScript函数调用中。因此,如果选项[:callback]
是字符串test
(要调用的函数的名称),则生成的JSONP将是:
'test({"some": "thing", "goes": "here"})'
它是一个模板,用插入字符串:callback
所指向的选项值替换第一个字段,并用数据的内容替换参数内的第二个字段
"callback(value)"
我敢打赌,结果字符串将在其他地方求值,在那里它将成为对过程的调用。这将像这样工作:
options[:callback] = "foo"
data="arg,arg,arg"
(注意,数据被编码为JSON,因此作为数据传递的字符串是JSON字符串
然后字符串变成“foo(arg.arg.arg)”,当它被求值时,它变成了对带有这些参数的例程foo
的调用
更新:
实际上,关于Ruby eval,我要回顾一下——虽然这会起作用,但它更可能变成一个Javascript函数调用。这样,您就可以将Javascript函数的名称作为字符串传递,代码将返回相应的回调函数供Javascript稍后执行。这是一个替代fir的模板包含由插入字符串:callback插入的选项值的st字段,以及包含数据内容的参数内的第二个字段
"callback(value)"
我敢打赌,生成的字符串将在其他地方求值,在那里它将成为对过程的调用。其工作原理如下:
options[:callback] = "foo"
data="arg,arg,arg"
(注意,数据被编码为JSON,因此作为数据传递的字符串是JSON字符串
然后字符串变成“foo(arg.arg.arg)”,当它被求值时,它变成了对带有这些参数的例程foo
的调用
更新:
实际上,关于Ruby eval,我要回溯一下——虽然这会起作用,但它更可能变成一个Javascript函数调用。这样,您就可以将Javascript函数的名称作为字符串传递,代码将返回相应的回调函数供Javascript稍后执行。您可以重写
"#{options[:callback]}(#{data})"
作为
你可以重写
"#{options[:callback]}(#{data})"
作为
不,#{}符号是字符串插值。对——我认为从技术上讲是正确的,我应该用引号把行括起来。我还怀疑我把这个问题误解为“这段代码的目的是什么”,而不是字面上的“它在做什么”。:)不,是#{}表示法是字符串插值。对——我认为从技术上讲是正确的,我应该用引号将行括起来。我还怀疑我误解了这个问题“这段代码的目的是什么”,而不是字面上的“它在做什么”。:)