我正在为Rails尝试一些示例应用程序.我创建了一些控制器和页面.但是当我尝试访问其中一个时,我在网页上得到一个例外:
Sprockets::FileNotFound in Pages#home
Showing c:/railscode/test_app/app/views/layouts/application.html.erb
where line #6 raised:
couldn't find file 'jquery'
(in c:/railscode/test_app/app/assets/javascripts/application.js:7)
Extracted source (around line #6):
3: <head>
4: <title>TestApp</title>
5: <%= stylesheet_link_tag "application" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %> 8: </head> 9: <body>
Rails.root:`c:/railscode/test_app`
Run Code Online (Sandbox Code Playgroud)
我使用命令创建了一些控制器:
$ rails generate controller Pages home contact
create app/controllers/pages_controller.rb
route get "pages/contact"
route get "pages/home"
invoke erb
create app/views/pages
create app/views/pages/home.html.erb
create app/views/pages/contact.html.erb
invoke rspec
create spec/controllers/pages_controller_spec.rb
create spec/views/pages
create spec/views/pages/home.html.erb_spec.rb
create spec/views/pages/contact.html.erb_spec.rb
invoke helper …Run Code Online (Sandbox Code Playgroud) 我似乎遇到了很多设计问题,我从来不知道什么是真正合适的.一方面,我经常听到我应该限制耦合并坚持单一责任,但是当我这样做时,我经常发现在需要时很难将信息提供给程序的一部分.例如,
class Singer
def initialize(name)
@name = name
end
attr :name
end
Run Code Online (Sandbox Code Playgroud)
宋应该是:
class Song
def new(singer)
@singer = singer
end
end
Run Code Online (Sandbox Code Playgroud)
要么
class Song
def new(singer_name)
@singer_name = singer_name
end
end
Run Code Online (Sandbox Code Playgroud)
后者的耦合较少,所以根据原则我应该使用它.但如果我后来发现宋某需要了解更多有关歌手的事情,那我就是一个糟糕的方式.例如
class Song
...
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end
Run Code Online (Sandbox Code Playgroud)
如果我使用了后来的Song类而不是前者,我会解决这个问题.但后来我怀疑有人会提醒我SRP,单一责任原则,并建议:
class SongPlayer
def initialize(singer, song)
@singer, @song = singer, song
end
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end
Run Code Online (Sandbox Code Playgroud)
是的,我想这是有道理的,因为另一个歌手可能会掩盖别人的歌,对吗?但那么,它真的会是完全相同的歌吗?在我的大多数情况下,它永远不会是相同的"歌曲"所以我从来没有这种情况.那么SRP值得为代码带来额外的类吗?
我有时认为许多OOP原则(SOLID或其他原因)都会产生Java的局限性,并且不适用于Ruby.
我研究了这本尖锐的指南,它确实帮助我快速掌握了这门语言.之后,我开始使用Ruby解决一些编码难题.它很有助于习惯我所感受的语言.
我遇到了一个这样的谜题.我很容易解决它,因为它非常直接,但解决方案被主机网站拒绝,错误是"时间超过"!我知道Ruby无法与C/C++的速度竞争,但它必须能够在一个接受Ruby解决方案的网站上回答一个小小的难题吗?
这个谜题只是一种正常的方式.
这是我的解决方案
array ||= []
gets.to_i.times do
array << gets
end
puts array.sort
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有其他方法可以用Ruby实现高速排序?我在Array#sort这里使用的是基本的,但有没有办法更快地完成它,即使它意味着更多的代码行?