Ruby 理解此代码段“D”*(数值%1000/500)
有人能解释一下如何阅读这段代码以及它会做什么吗Ruby 理解此代码段“D”*(数值%1000/500),ruby,Ruby,有人能解释一下如何阅读这段代码以及它会做什么吗 'D' * (num % 1000 / 500) 它来自一种将整数转换为罗马数字的方法。我不明白它是如何工作的。它确实很模糊。我猜这个想法是把一个或零的Ds,取决于你在得到除1000的余数后,得到的数字是否大于500 操作顺序: num % 1000 模1000的数值。将保留最后三位数字 / 500 将查看最后三位数字是否大于500 重复一个字符串: 'x' * 5 # => "xxxxx" 之所以需要,是因为D是500的字母。您将
'D' * (num % 1000 / 500)
它来自一种将整数转换为罗马数字的方法。我不明白它是如何工作的。它确实很模糊。我猜这个想法是把一个或零的Ds,取决于你在得到除1000的余数后,得到的数字是否大于500 操作顺序:
num % 1000
模1000的数值。将保留最后三位数字
/ 500
将查看最后三位数字是否大于500
重复一个字符串:
'x' * 5 # => "xxxxx"
之所以需要,是因为D是500的字母。您将只有一个或零个,因为M是1000的字母。请参阅第页并向下滚动到Ruby运算符
乘法、除法和模运算都在一起,所以优先级是从左到右的IIRC
首先,计算num%1000。然后,除以500。然后乘以“D”。模%和除法/运算符具有相同的优先级
因此,这些操作符从左到右的结合性开始发挥作用
因此,表达式相当于“D”*num%1000/500:将“D”乘以num的最后3位数除以500。表达式num%1000/500表示如果最后3位数中的数字大于500,则计算为1,否则计算为0 D*0或1决定是否在罗马数字上加D。它的作用 该表达式是一种构建罗马数字500位的方法,即“D” 它接受任何数字,仅提取最右边的三个数字值0到999,并且仅当值为500或更大时才返回“D”。否则它将返回一个空字符串 怎么读 在Ruby中,乘法*、除法/、模数%符号具有相同的优先级,并按从左到右的顺序进行处理。但是,括号的优先级高于这三个运算符 要帮助可视化处理顺序,可以添加可选括号:
'D' * ( ( num % 1000 ) / 500 )
数量%1000:
提取数字最右边的三位数字,得到值0-999
{0-999} / 500:
确定值是否为500或更大。
如果是,则返回1;如果不是,则返回0。
在Ruby中,整数除法不会自动转换为小数。
'D'*{1或0}:
在Ruby中,乘1返回字符串,乘0返回空字符串
例子
对于编号35045:
35045 % 1000 #=> 45
45 / 500 #=> 0
'D' * 0 #=> ""
对于号码468987:
468987 % 1000 #=> 987
987 / 500 #=> 1
'D' * 1 #=> "D"
对于670号:
670 % 1000 #=> 670
670 / 500 #=> 1
'D' * 1 #=> "D"
对于数字7:
7 % 1000 #=> 7
7 / 500 #=> 0
'D' * 0 #=> ""
将代码放入问题正文中。“D”*num%1000/500的哪个部分你不明白?num是什么。。。。。。。。。。。。。。。。。另一种表达方式是num%1000<500?:'既然罗马数字的值高达5000,我们可以创建一个所有可能的罗马数字的散列并使用它进行转换吗?