1.除法运算。
a.全是正数时,截断取整,去掉小数部分。
128 / 10 = 12;
120 / 10 = 12;
119 / 10 = 11;
b.当被除数或者除数出现负数时,可以理解成把负号提取出来,再采取上面一样的做法。
(-128) / 10 = -(128 / 10) = -12;
(128) / (-10) = -(128 / 10) = -12;
(-128) / (-10) = - -(128 / 10) = 128 / 10 = 12;
2.取模运算。
a.全是正数时,可理解为除法截断的部分,余数。
128 = (128 / 10) * 10 + (128 % 10);
128 = 12 * 10 + (128 % 10);
128 = 120 + 8;
128 % 10 = 8;
b.当出现负数时,取模运算的结果的正负号与被取模数相同。
128 = (128 / 10) * 10 + (128 % 10);
128 = 12 * 10 + 8;
128 % 10 = 8;
-128 = (-128 / 10) * 10 + (-128 % 10);
-128 = -(12) * 10 + (-128 % 10);
-128 = -120 + (-8);
-128 % 10 = -8;
128 = (128 / -10) * -10 + (128 % -10);
128 = -12 * -10 + (128 % -10);
128 = 120 + 8;
128 % -10 = 8;
-128 = (-128 / -10) * -10 + (-128 % -10);
-128 = 12 * -10 + (-128 % -10);
-128 = -120 + (-8);
-128 % -10 = -8;
简单理解为:
%取模运算, 结果正负号与被取模数一致。
除法是趋向0的截断取整。
128 / 10 * 10 = 120比128更接近0。
-128 / 10 * 10 = -120比-128更接近0。
128 / -10 * -10 = 120比128更接近0。
-128 / -10 * -10 = -120比-128更接近0。
x = x/y*y + x%y;
x%y = x - x/y*y;
假设 D = x/y*y,
x%y = x - D;
D具有以x为起点,趋向于0的特性。
当被取模数x为正数时, D趋向于0,D<=x, 取模结果(x - D)必定是0或者正数。
当被取模数x为负数时, D趋向于0,D>=x, 取模结果(x - D)必定是0或者负数。
因此得出:
%取模运算, 结果正负号与被取模数一致的结论。
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我明白了:x,(y,z)=1,*[2,3]x#=>1y#=>2z#=>nil我想知道为什么z的值为nil。 最佳答案 x,(y,z)=1,*[2,3]右侧的splat*是内联扩展的,所以它等同于:x,(y,z)=1,2,3左边带括号的列表被视为嵌套赋值,所以它等价于:x=1y,z=23被丢弃,而z被分配给nil。 关于ruby-带括号和splat运算符的并行赋值,我们在StackOverflow上找到一个类似的问题: https://stackoverflow
问题是:除了在“OperatorExpressions”?例如:1%!2 最佳答案 是的,可以创建自定义运算符,但有一些注意事项。Ruby本身并不直接支持它,但是superatorsgem做了一个巧妙的把戏,将运算符链接在一起。这允许您创建自己的运算符,但有一些限制:$geminstallsuperators19然后:require'superators19'classArraysuperator"%~"do|operand|"#{self}percent-tilde#{operand}"endendputs[1]%~[2]#Out
在Ruby中有运算符(operator)。在API中,他们没有命名它的名字,只是:Theclassmustdefinetheoperator...Comparableusestoimplementtheconventionalcomparison......theobjectsinthecollectionmustalsoimplementameaningfuloperator...它叫什么名字? 最佳答案 参见上面的@Tony。然而,它也被称为(俚语)“宇宙飞船运算符(operator)”。
也许这听起来很荒谬,但我想知道这对Ruby是否可行?基本上我有一个功能...defadda,bc=a+breturncend我希望能够将“+”或其他运算符(例如“-”)传递给函数,这样它就类似于...defsuma,b,operatorc=aoperatorbreturncend这可能吗? 最佳答案 两种可能性:以方法/算子名作为符号:defsuma,b,operatora.send(operator,b)endsum42,23,:+或者更通用的解决方案:采取一个block:defsuma,byielda,bendsum42,23,
可能真的很简单,但我很难在网上找到关于这个的文档我在Ruby中有两个activerecord查询,我想通过OR运算符连接在一起@pro=Project.where(:manager_user_id=>current_user.id)@proa=Project.where(:account_manager=>current_user.id)我是ruby的新手,但我自己尝试使用||@pro=Project.where(:manager_user_id=>current_user.id||:account_manager=>current_user.id)这没有用,所以1.我想知道如何在
我是Ruby和这个网站的新手。下面两个函数是不同的,一个在函数外修改变量,一个不修改。defm1(x)x我想确保我理解正确-当调用m1时,对str的引用被复制并传递给将其视为x的函数。运算符当调用m2时,对str的引用被复制并传递给将其视为x的函数。运算符+创建一个新字符串,赋值x=x+"4"只是将x重定向到新字符串,而原始str变量保持不变。对吧?谢谢 最佳答案 String#+::str+other_str→new_strConcatenation—ReturnsanewStringcontainingother_strconc
ruby中有这样的东西吗?send(+,1,2)我想让这段代码看起来不那么冗余ifop=="+"returnarg1+arg2elsifop=="-"returnarg1-arg2elsifop=="*"returnarg1*arg2elsifop=="/"returnarg1/arg2 最佳答案 是的,只需像这样使用send(或者更好的是public_send):arg1.public_send(op,arg2)这是可行的,因为Ruby中的大多数运算符(包括+、-、*、/、andmore)只需调用方法。所以1+2与1.+(2)相同
您如何找到有关代码中运算符用法的信息(最好是通过Google)?在这种情况下,我想找到这段代码在Ruby中的含义。x=[1,2,3]x.send:[]=,0,2x[0]+x.[](1)+x.send(:[],2)我要你教我如何钓鱼——不要告诉我运算符(operator)是做什么的。当我去Google并尝试搜索符号时,我得到的示例或教程没有涵盖特定的用法。https://stackoverflow.com/questions/1165786/how-to-search-for-punctuation-that-gets-ignored-by-google表示谷歌驳回了这种表示法;我寻找“
重新定义Float#/似乎没有效果:classFloatdef/(other)"magic!"endendputs10.0/2.0#=>5.0但是当另一个中缀运算符Float#*被重新定义时,Float#/突然采用了新的定义:classFloatdef/(other)"magic!"enddef*(other)"spooky"endendputs10.0/2.0#=>"magic!"我很想知道是否有人可以解释这种行为的来源,以及其他人是否得到相同的结果。ruby:ruby2.0.0p353(2013-11-22)[x64-mingw32]要快速确认错误,请运行thisscript.