有人可以向我解释一下ruby中的“左移”语法意味着什么?
例如,我有这个
File.open( folder, 'w' ){ |f| f << datavalue }
我知道这意味着将每个数据值写入文件夹,但|f| f << datavalue
部分对我没有意义。为什么f在括号内,与左移相关并将数据值写入文件夹?
基本上,我不明白这条线的含义
{ |f| f << datavalue }
答案 0 :(得分:4)
File.open( folder, 'w' ){ |f| f << datavalue }
与写作相同:
File.open( folder, 'w' ) do |f|
f << datavalue
end
两者都是Ruby块表示法的示例。 Ruby中的块是匿名方法。块期望的变量在垂直条之间声明。在这种情况下,变量f
表示通过File.open命令返回的文件对象。
关于<<
运算符。在这里它被用作连接器。我相信它在对象(例如字符串,数组,在本例中是文件)上使用时称为追加运算符。例外情况是,如果对象是数字,那么当它成为左移操作符以移动数字的位时。
答案 1 :(得分:0)
some_text = "world!"
hello = "Hello, "
hello << some_text
puts hello # prints "Hello, world!"
答案 2 :(得分:0)
那么答案是:这取决于。我不想挑剔,但Ruby几乎没有任何实际的运算符。实际上,在Ruby中,大多数“运算符”都是方法,就像在Ruby中一样,所有东西都是对象。
例如考虑这段代码
o.x = a + b
这里没有运算符,因为实际上这只是编写此代码的另一种方式
o.x=(a.+(b))
x=
是设置方法的名称,+
也是对象a
的方法的名称。在Ruby中,可以将其他语言中的运算符用作方法名称的一部分(想一想?
,这是Ruby方法名称中常用的)。
这段代码
a = b << c
实际上与写作相同
a = b.<<(c)
所以<<
的工作取决于b
如何实现此方法。
例如对于String
而言,<<
方法意味着添加。
a = "Hello, " << "Word"
# a == "Hello, Word"
但是对于Fixnum
而言,<<
方法仅意味着向左移动:
a = 5 << 2
# a == 20
因此无法回答<<
的含义,您必须在文档中查找对该方法传递给的对象的含义。如果您编写自己的类,则可以按照自己喜欢的任何方式实现此操作符
class MyClass
# If you prefer, can also be written as
# def << x
def << ( x )
# do something with x
end
end
o = MyClass.new()
x = o << a
您的方法<<
被调用,然后您决定如何处理a
。