if counter % 2 == 1我试图解码这一行-这是一个Rails项目,我试图弄清楚%在这个if语句中做了什么。
if counter % 2 == 1
%
xfb7svmp1#
%是modulo运算符。counter % 2的结果是counter / 2的余数。n % 2通常是判断一个数n是偶数还是奇数的好方法。如果n % 2 == 0,这个数是偶数(因为没有余数意味着这个数能被2整除);如果n % 2 == 1,则数字是奇数。
counter % 2
counter / 2
n % 2
n
n % 2 == 0
n % 2 == 1
ttygqcqt2#
在回答“Ruby中的%符号做什么或意味着什么?“它是:1.模二元运算符(如前所述)
17 % 10 #=> 7
1.替代字符串token
%Q{hello world} #=> "hello world" %Q(hello world) #=> "hello world" %Q[hello world] #=> "hello world" %Q!hello world! #=> "hello world" # i.e. choose your own bracket pair %q(hello world) #=> 'hello world' %x(pwd) #=> `pwd` %r(.*) #=> /.*/
1.字符串格式操作符(Kernel::sprintf的简写)
"%05d" % 123 #=> "00123"
pgx2nnw83#
这就是模运算符。它给出计数器除以2的余数。
For example: 3 % 2 == 1 2 % 2 == 0
nzkunb0c4#
不管它是如何工作的,模运算符可能不是最好的代码(即使我们没有给出太多的上下文)。正如Jörg在评论中提到的,表达式if counter.odd?可能是意图,并且更具可读性。如果这是视图代码,并且用于确定(例如)交替的行颜色,那么您可以通过使用内置的Rails助手cycle()来完全不使用计数器。例如,您可以使用cycle('odd','even')作为表行的类名,从而消除计数器和if/then逻辑。另一个想法:如果这是在一个each块中,您可以使用each_with_index并消除无关的计数器变量。我的重构0.02美元。
if counter.odd?
cycle()
cycle('odd','even')
each
luaexgnf5#
还要记住,Ruby对模(%)运算符的定义与C和Java不同。在Ruby中,-7%3是2。在C和Java中,结果是-1。在Ruby中,结果的符号(对于%运算符)总是与第二个操作数的符号相同。
-7%3
2
-1
nkkqxpd96#
这就是modulo operator。http://en.wikipedia.org/wiki/Modulo_operation
s4n0splo7#
它是模运算符,这是一种说它是余数运算符的奇特方式。所以如果你把一个数除以2,这个数的整数余数是1,那么你知道这个数是奇数。您的示例检查奇数。通常这样做是为了用不同的背景颜色突出显示奇数行,使其更容易阅读大型数据列表。
vaqhlq818#
这是一个非常基本的问题。%是模运算器if counter % 2 == 1的结果,对于每个奇数为true,对于每个偶数为false。如果你正在学习ruby,你应该学习如何使用irb,在那里你可以尝试一些东西,也许可以自己回答这个问题。试图进入
true
false
irb
100.times{|i| puts "#{i} % 2 == 1 #=> #{i % 2 == 1}"}
到你的irb irb控制台,并看到输出,然后它应该是清楚的%做什么。你真的应该看看rails的API文档(1.9,1.8.7,1.8.7),在那里你会找到你的问题%(Fixnum)的答案,并有一个进一步的链接到divmod(Numeric)的详细描述:返回一个数组,该数组包含num除以aNumeric所得的商和模数。>如果q,r = x.divmod(y),则
q = floor(float(x)/float(y)) x = q*y + r
商四舍五入至无穷大,如下表所示:
a | b | a.divmod(b) | a/b | a.modulo(b) | a.remainder(b) ------+-----+---------------+---------+-------------+--------------- 13 | 4 | 3, 1 | 3 | 1 | 1 ------+-----+---------------+---------+-------------+--------------- 13 | -4 | -4, -3 | -3 | -3 | 1 ------+-----+---------------+---------+-------------+--------------- -13 | 4 | -4, 3 | -4 | 3 | -1 ------+-----+---------------+---------+-------------+--------------- -13 | -4 | 3, -1 | 3 | -1 | -1 ------+-----+---------------+---------+-------------+--------------- 11.5 | 4 | 2, 3.5 | 2.875 | 3.5 | 3.5 ------+-----+---------------+---------+-------------+--------------- 11.5 | -4 | -3, -0.5 | -2.875 | -0.5 | 3.5 ------+-----+---------------+---------+-------------+--------------- -11.5 | 4 | -3, 0.5 | -2.875 | 0.5 | -3.5 ------+-----+---------------+---------+-------------+--------------- -11.5 | -4 | 2 -3.5 | 2.875 | -3.5 | -3.5
示例
11.divmod(3) #=> [3, 2] 11.divmod(-3) #=> [-4, -1] 11.divmod(3.5) #=> [3, 0.5] (-11).divmod(3.5) #=> [-4, 3.0] (11.5).divmod(3.5) #=> [3, 1.0]
carvr3hs9#
给给予几种说法:
严格地说,如果a % b = c,c是唯一常数,a == c (mod b)和0 <= c < b其中x == y (mod m)当且仅当x - y = km为常数k。这相当于其余部分。通过一些众所周知的定理,我们有a = bk + c对于某个常数k,其中c是余数,这就给出了a - c = bk,这显然意味着a == c (mod b)。(Is有办法在Stackoverflow上使用LaTeX吗?)
a % b = c
c
a == c (mod b)
0 <= c < b
x == y (mod m)
x - y = km
k
a = bk + c
a - c = bk
9条答案
按热度按时间xfb7svmp1#
%
是modulo运算符。counter % 2
的结果是counter / 2
的余数。n % 2
通常是判断一个数n
是偶数还是奇数的好方法。如果n % 2 == 0
,这个数是偶数(因为没有余数意味着这个数能被2整除);如果n % 2 == 1
,则数字是奇数。ttygqcqt2#
在回答“Ruby中的%符号做什么或意味着什么?“它是:
1.模二元运算符(如前所述)
1.替代字符串token
1.字符串格式操作符(Kernel::sprintf的简写)
pgx2nnw83#
这就是模运算符。它给出计数器除以2的余数。
nzkunb0c4#
不管它是如何工作的,模运算符可能不是最好的代码(即使我们没有给出太多的上下文)。正如Jörg在评论中提到的,表达式
if counter.odd?
可能是意图,并且更具可读性。如果这是视图代码,并且用于确定(例如)交替的行颜色,那么您可以通过使用内置的Rails助手
cycle()
来完全不使用计数器。例如,您可以使用cycle('odd','even')
作为表行的类名,从而消除计数器和if/then逻辑。另一个想法:如果这是在一个
each
块中,您可以使用each_with_index并消除无关的计数器变量。我的重构0.02美元。
luaexgnf5#
还要记住,Ruby对模(
%
)运算符的定义与C和Java不同。在Ruby中,-7%3
是2
。在C和Java中,结果是-1
。在Ruby中,结果的符号(对于%
运算符)总是与第二个操作数的符号相同。nkkqxpd96#
这就是modulo operator。
http://en.wikipedia.org/wiki/Modulo_operation
s4n0splo7#
它是模运算符,这是一种说它是余数运算符的奇特方式。
所以如果你把一个数除以2,这个数的整数余数是1,那么你知道这个数是奇数。您的示例检查奇数。
通常这样做是为了用不同的背景颜色突出显示奇数行,使其更容易阅读大型数据列表。
vaqhlq818#
这是一个非常基本的问题。
%
是模运算器if counter % 2 == 1
的结果,对于每个奇数为true
,对于每个偶数为false
。如果你正在学习ruby,你应该学习如何使用
irb
,在那里你可以尝试一些东西,也许可以自己回答这个问题。试图进入
到你的
irb
irb控制台,并看到输出,然后它应该是清楚的%
做什么。你真的应该看看rails的API文档(1.9,1.8.7,1.8.7),在那里你会找到你的问题%(Fixnum)的答案,并有一个进一步的链接到divmod(Numeric)的详细描述:
返回一个数组,该数组包含num除以aNumeric所得的商和模数。>如果q,r = x.divmod(y),则
商四舍五入至无穷大,如下表所示:
示例
carvr3hs9#
给给予几种说法:
严格地说,如果
a % b = c
,c
是唯一常数,a == c (mod b)
和0 <= c < b
其中
x == y (mod m)
当且仅当x - y = km
为常数k
。这相当于其余部分。通过一些众所周知的定理,我们有
a = bk + c
对于某个常数k
,其中c
是余数,这就给出了a - c = bk
,这显然意味着a == c (mod b)
。(Is有办法在Stackoverflow上使用LaTeX吗?)