关于Ruby的澄清<<操作符

我对Ruby非常陌生,并且对<<运算符感到疑惑。当我用Google搜索这个操作符,它说,它是给这个例子二进制向左移位运算符:关于Ruby的澄清<<操作符

a << 2会给15这是1111 0000

但是

,它似乎并没有成为一个“二进制在此代码向左移位运算符”:

class TextCompressor 

attr_reader :unique, :index

def initialize(text)

@unique = []

@index = []

add_text(text)

end

def add_text(text)

words = text.split

words.each { |word| do add_word(word) }

end

def add_word(word)

i = unique_index_of(word) || add_unique_word(word)

@index << i

end

def unique_index_of(word)

@unique.index(word)

end

def add_unique_word

@unique << word

unique.size - 1

end

end

和this question似乎并不在我所提供的代码申请。因此,使用我的代码,Ruby <<运算符是如何工作的?

回答:

Ruby是一种面向对象的语言。面向对象的基本原则是对象将消息发送给其他对象,并且消息的接收者可以以任何合适的方式对消息作出响应。所以,

a << b 

意味着什么a决定它的意思。不可能说什么<<意味着不知道a是什么。

作为一般惯例,在<<红宝石的意思是“追加”,即它追加它的参数到它的接收器,然后返回接收器。因此,对于Array其附加的参数数组,为String它执行字符串连接,为Set其添加的参数设定,为IO其写入文件描述符,等等。

作为特殊情况,对于FixnumBignum,它执行Integer的二进制补码表示的按位左移。这主要是因为这就是它在C中的作用,Ruby受C影响。

回答:

< <功能,根据http://ruby-doc.org/core-1.9.3/Array.html#method-i-3C-3C,是一个附加功能。它将传入的值附加到数组,然后返回数组本身。 Ruby对象通常可以定义在其他语言上的函数,看起来像是一个运算符。

回答:

< <只是一种方法。它在某种意义上通常意味着“追加”,但意味着什么。对于字符串和数组,它意味着追加/添加。对于整数它是按位移。

试试这个:

class Foo 

def << (message)

print "hello " + message

end

end

f = Foo.new

f << "john" # => hello john

回答:

<<是一个操作符是语法糖调用给定对象的<<方法。在Fixnum it is defined to bitshift left上,但根据定义的类别具有不同的含义。例如,对于Array it adds (or, rather, "shovels") the object into the array。

在这里我们可以看到,<<确实只是语法糖的方法调用:

[] << 1 # => [1] 

[].<<(1) # => [1]

,因此在你的情况下,它只是调用<<@unique,在这种情况下是一个Array

回答:

在Ruby中,运算符只是方法。根据班级的变量,<<可以做不同的事情:

# For integers it means bitwise left shift: 

5 << 1 # gives 10

17 << 3 # gives 136

# arrays and strings, it means append:

"hello, " << "world" # gives "hello, world"

[1, 2, 3] << 4 # gives [1, 2, 3, 4]

这一切都取决于什么类定义<<是。

以上是 关于Ruby的澄清&lt;&lt;操作符 的全部内容, 来源链接: utcz.com/qa/265841.html

回到顶部