ruby有一些边缘情况很难解释,因为解析会带来一些有趣的问题.我在这里列出其中两个.如果你知道更多,那么添加到列表中.
def foo
5
end
# this one works
if (tmp = foo)
puts tmp.to_s
end
# However if you attempt to squeeze the above
# three lines into one line then code will fail
# take a look at this one. I am naming tmp2 to
# avoid any side effect
# Error: undefined local variable or method ‘tmp2’ for main:Object
puts tmp2.to_s if (tmp2 = foo)
Run Code Online (Sandbox Code Playgroud)
这是另一个.
def x
4
end
def y
x = 1 if false …Run Code Online (Sandbox Code Playgroud) 我正在尝试在扩展程序面板中添加一个显示在Chrome扩展程序名称旁边的图标.我尝试使用以下manifest.json文件.
{
"name": "My Extension",
"version": "1.0",
"manifest_version": 2,
"icons": { "16": "mediumIcon.png", "48": "mediumIcon.png", "128": "mediumIcon.png" },
"description": "A practice extension.",
"browser_action": {
"default_icon": "smallIcon.png",
"default_popup": "load.html"
}
}
Run Code Online (Sandbox Code Playgroud)
mediumIcon.png是128x128.当我在Chrome的"扩展程序"标签中输入开发者模式并加载解压缩的扩展程序时,该图标不在我的扩展程序名称旁边.实际上,图标的黑白版本会瞬间闪烁,然后会出现默认的Chrome扩展程序图标(看起来像拼图).
为什么不?我认为文档指出,图标可以在必要时缩小.
我有一个标准的rails 3 webapp与默认资产管道.突然之间,资产需要很长时间才能加载(我的页面加载时间大约为1-2秒到1分钟).服务器响应时间(/ home)是正常的,但是一些.css和.js文件等待很长时间(最多45秒).即采取这种只有少数资产,长期是指那些由宝石提供(例如:modernizr-rails/vendor/assets/javascripts/modernizr.js)
例如,对于modernizr.js?body=1:
头:
Request URL:http://dev.sharewizz.com:3000/assets/modernizr.js?body=1
Request Method:GET
Status Code:304 Not Modified
Run Code Online (Sandbox Code Playgroud)
统计:
DNS Lookup 5.00?s
Connecting 20.07?s
Sending 0
Waiting 10?ms
Receiving 3?ms
Run Code Online (Sandbox Code Playgroud)
它是链轮的问题吗?我怎么知道什么是错的?
注意:所有其他浏览器的行为相同. 编辑:实际上问题只有chrome,甚至没有safari.我试图在端口3000和端口80上使用rails s启动我的服务器(没有更改)
如果我访问http://localhost:3000/assets/modernizr.js?body=1,大多数时候它是即时的,有时它会等待很长时间.
assets google-chrome ruby-on-rails-3 sprockets asset-pipeline
我想获取当前ruby的gem目录(在rbenv下).
这给了我bin bin:
rbenv which ruby
Run Code Online (Sandbox Code Playgroud)
我可以切换并满足我的需求,但我想看看是否有更直接的东西.
我在想
rbenv prefix
Run Code Online (Sandbox Code Playgroud)
是最好的选择.这给我留下了类似的东西
/Users/newalexandria/.rbenv/versions/1.9.3-p448
Run Code Online (Sandbox Code Playgroud)
我附加的
/lib/ruby/gems/1.9.1/gems
Run Code Online (Sandbox Code Playgroud)
我担心宝石版.想看到更好的东西.
我在rails应用程序上为ruby创建表时遇到问题.这让我疯狂!我尝试创建表时返回以下内容:
错误1(HY000):无法创建/写入文件'/usr/local/mysql/data/test_development/users.MYI'(错误代码:2)
值得一提的是,我是一个新手,顺便说一句.
如果我打开一个给定的邮件文件,~/maildir-sent/那么文件没有语法高亮.Vi具有邮件文件的默认突出显示,我可以手动启用它
:set ft=mail
默认情况下不会发生这种情况,因为那里的邮件文件具有笨拙的名称结构 1339174749.7162_2.tm24-s00418:2,S
默认情况下如何使邮件文件突出显示?IE我认为这个默认读取类似"所有与另一个语法高亮定义不匹配的文件"
我有一个偶尔吐出2个物体的系统.是否有任何魔法create!允许它创建两个对象?EG如果我说
self.class.create! make_up_attributes
Run Code Online (Sandbox Code Playgroud)
并make_up_attributes传递一个2项哈希,这可以创建2个类型的对象self?
(注意,create可能是一个ActiveRecord方法,在Rails中)
我有一个类Parent和一个类Child(它是子类的子类Parent).
Parent有一个叫做的方法aaaa.Child有一个叫做的方法bbbb.这就是我想要实现的目标:
bbbb成为一个延伸aaaa.如果我调用aaaa一个Child对象,它将运行aaaa通常会执行的操作,以及其他内容bbbb.bbbb将执行与上面相同的操作(运行aaaa通常会执行的操作,然后执行其他操作bbbb).这就是我最终做的事情:
class Parent
def aaaa
print "A"
end
end
class Child < Parent
alias_method :original_aaaa,:aaaa
def bbbb
original_aaaa
print "B"
end
alias_method :aaaa,:bbbb
end
c = Child.new
c.aaaa # => AB
c.bbbb # => AB
Run Code Online (Sandbox Code Playgroud)
它有效.我猜.但它感到非常hackish.另外,这样做的一个缺点是,如果我想aaaa在定义之前或之后使用相同的名称进行扩展,那么 …
说我想要puts字母表.所以我可以这样做:
alphabet = ('a'..'z')
alphabet.map do |a|
puts a
end
Run Code Online (Sandbox Code Playgroud)
我现在要做的是排除vowels.
alphabet = ('a'..'z')
vowels = ['a','e','i','o','u']
alphabet.map do |a|
puts a unless a == vowels
end
Run Code Online (Sandbox Code Playgroud)
我试图避免这种情况:
alphabet = ('a'..'z')
alphabet.map do |a|
puts a unless a == 'a'
puts a unless a == 'e'
puts a unless a == 'i'
puts a unless a == 'o'
puts a unless a == 'u'
end
Run Code Online (Sandbox Code Playgroud)
我如何在语法上实现第二个示例,以便它正常工作?