关于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
其写入文件描述符,等等。
作为特殊情况,对于Fixnum
和Bignum
,它执行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的澄清<<操作符 的全部内容, 来源链接: utcz.com/qa/265841.html