我试图回答Chris Pine的"学习编程"一书中的以下问题:
闰年.编写一个程序,要求开始年份和结束年份,然后将所有闰年放在它们之间(如果它们也是闰年,则包括它们).闰年是可被4整除的年份(如1984年和2004年).然而,被100整除的年份不是闰年(例如1800和1900),除非它们也可被400整除(例如1600和2000,实际上是闰年).真是一团糟!
运行代码时出现以下错误:
leap_year.rb:12:in +': no implicit conversion of Fixnum into String (TypeError)
from leap_year.rb:12:in'
这是我的代码:
#leap years
puts 'What is the starting year?'
starting_year = gets.chomp
puts 'What is the ending year?'
ending_year = gets.chomp
while starting_year <= ending_year
if starting_year%4 == 0 && (starting_year%100 != 0 && starting_year%400 == 0)
puts starting_year
end
starting_year+=1
end
Run Code Online (Sandbox Code Playgroud) 在ruby中有一个方法可以将fixnum变成像74239数组一样[7,4,2,3,9]吗?
在我写的脚本中,我想在Ruby中找到Fixnum的长度.我能做到<num>.to_s.length,但有没有办法直接找到Fixnum的长度而不将其转换为String?
我最近决定users在Ruby On Rails应用程序中列出所有内容- 因为我无法弄清楚如何以其他方式列出它们,我决定使用partials.我的管理页面上有以下内容(只是连接到自己的管理控制器):
<%= render :partial => User.find(:all) %>
Run Code Online (Sandbox Code Playgroud)
然后_user.html.erb我在我的用户视图文件夹中调用了一个文件.这包含以下内容:
<ul>
<% div_for @user.object_id do %>
<li><%= link_to user.username, user.username %></li>
<% end %>
</ul>
Run Code Online (Sandbox Code Playgroud)
当应用程序运行并进入管理页面时,我收到以下错误:
未定义的方法`id'为4:Fixnum
它说这是因为这一行(在部分文件中):
<% div_for @user.object_id do %>
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会发生这种情况(并且已经用Google搜索了几个小时才能找到结果并且只找到对我不起作用的解决方案).我认为这与我对@user实例变量的使用有关,但我不完全确定.
我正在寻找在Lisp中表示负无穷大的标准方法.是否有一个符号值,Lisp的算术函数识别为少于所有其他数字?
具体来说,我正在寻找一种优雅的方式来编写以下内容:
(defun largest (lst)
"Evaluates to the largest number in lst"
(if (null lst)
***negative-inifinity***
(max (car lst) (largest (cdr lst)))))
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试将counts["email"]包含数字82,000的哈希除以total包含值130万的变量.
当我跑步时,puts counts["email"]/total我得到0.
为什么我不能对这些进行分工呢?
我尝试比较我的Ruby应用程序中的标志.
我有这个代码:
if self.flag &~ flag == self.flag
return false
Run Code Online (Sandbox Code Playgroud)
但它不会运行.我把问题缩小到了这个范围:
irb(main):020:0> my_user.flag
=> 1
irb(main):021:0> flag
=> 128
irb(main):022:0> my_user.flag.class
=> Fixnum
irb(main):023:0> flag.class
=> Fixnum
irb(main):024:0> my_user.flag &~ flag
TypeError: wrong argument type Fixnum (expected Proc)
Run Code Online (Sandbox Code Playgroud)
这真是令人不安,因为它的工作原理如下:
irb(main):025:0> 1 &~ 128
=> 1
Run Code Online (Sandbox Code Playgroud) 对于数字n,我只能想到
array_of_digits = n.to_s.split('').map(&:to_i)
Run Code Online (Sandbox Code Playgroud)
还有更优雅的方法吗?
它们看起来是等效的,但是当比较它们时,它是错误的:
5.is_a? Fixnum
# => true
5.is_a? Numeric
# => true
Numeric == Fixnum
# => false
Run Code Online (Sandbox Code Playgroud)