左移是什么意思?

时间:2011-03-10 14:06:48

标签: ruby

有人可以向我解释一下ruby中的“左移”语法意味着什么?

例如,我有这个

File.open( folder, 'w' ){ |f| f << datavalue } 

我知道这意味着将每个数据值写入文件夹,但|f| f << datavalue部分对我没有意义。为什么f在括号内,与左移相关并将数据值写入文件夹?

基本上,我不明白这条线的含义

{ |f| f << datavalue } 

3 个答案:

答案 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

相关问题