我在一个我想在formtastic Gem中重写的方法中发现了这个。该方法是这样的:没有参数的`<<(双小于)是什么意思?
def to_html
input_wrapping do
hidden_field_html <<
label_with_nested_checkbox
end
end
什么是<<
做第三行?我知道它与阵列有什么关系,但在这里我不知道。
我在一个我想在formtastic Gem中重写的方法中发现了这个。该方法是这样的:没有参数的`<<(双小于)是什么意思?
def to_html
input_wrapping do
hidden_field_html <<
label_with_nested_checkbox
end
end
什么是<<
做第三行?我知道它与阵列有什么关系,但在这里我不知道。
你可以这样阅读:
hidden_field_html << label_with_nested_checkbox
label_with_nested_checkbox
是被串联到的hidden_field_html
结束的说法 - 他们已经在两行的“清晰”
第四行应该可以缩进2个空格,至少,这就是我所要做的。 –
在拆呢类继承有<
使用,而不是<<
,而前者与方法<<
一般无关。
Ruby对空间缩进具有很高的容忍度;几乎在任何地方都可以在函数调用和它的参数之间放置任意数量的空格,包括换行符。
E.克:
'aaa'.
length
#⇒ 3
和
'aaa'
.length
#⇒ 3
都是完全有效的。
<<
是通用方法,可能会覆盖任何类。在这里它应该是String#<<
方法,即位置追加参数给字符串接收器。通常,人们可能会在任何任意类覆盖此方法:
class A
attr_accessor :var
def initialize
@var = 5
end
def << value
@var += value
end
end
a = A.new
a.var
#⇒ 5
a << 37
a.var
#⇒ 42
所以他们使用自定义的'<<' - 方法?谢谢! :) –
不,如我所说,他们应该使用'String#<<'。你可以通过检查接收器类来检查它:'puts hidden_field_html.class.to_s'。 – mudasobwa
'hidden_field_html'应该是一个'array'或'string'和'label_with_nested_checkbox'被添加到其中。该标准说你的代码不应该超过80列,所以可能是因为它已经写成两行。 – Deep