Ruby setters - 无论是由类创建(c)attr_accessor还是手动创建- 似乎是self.在类本身内访问时需要限定的唯一方法.这似乎使Ruby独自成为语言世界:
self/ this(像Perl,我认为是Javascript)self/ this是(C#,Java)self/ this(Ruby?)最好的比较是C#VS红宝石,因为这两种语言都支持这句法工作就像类的实例变量的访问方法:foo.x = y,y = foo.x.C#称它们为属性.
这是一个简单的例子; Ruby中的相同程序然后是C#:
class A
def qwerty; @q; end # manual getter
def qwerty=(value); @q = value; end # manual setter, but attr_accessor is same
def asdf; self.qwerty = 4; end # "self." is necessary in ruby?
def xxx; asdf; end # we can invoke nonsetters w/o "self." …Run Code Online (Sandbox Code Playgroud) 如何删除使用通配符域设置的rails中的cookie:
cookies[:foo] = {:value => 'bar', :domain => '.acme.com'}
Run Code Online (Sandbox Code Playgroud)
按照文档,您可以:
cookies.delete :foo
Run Code Online (Sandbox Code Playgroud)
日志说
Cookie set: foo=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT
Run Code Online (Sandbox Code Playgroud)
请注意,域名丢失了(似乎所有内容都使用默认的参数).尊重RFC,当然cookie还在那里,浏览器 - > ctrl/ cmd- L- >
javascript:alert(document.cookie);
Run Code Online (Sandbox Code Playgroud)
瞧!
问:删除这样一个cookie的"正确"方法是什么?
我最近将一个ruby库转换为gem,这似乎打破了命令行的可用性
作为图书馆工作得很好
$ ruby -r foobar -e 'p FooBar.question' # => "answer"
Run Code Online (Sandbox Code Playgroud)
作为一个gem,irb知道如何从命令行开关中获取gem
$ irb -rubygems -r foobar
irb(main):001:0> FooBar.question # => "answer"
Run Code Online (Sandbox Code Playgroud)
但红宝石本身也是如此:
$ ruby -rubygems -r foobar -e 'p FooBar.question'
ruby: no such file to load -- foobar (LoadError)
Run Code Online (Sandbox Code Playgroud)
我现在必须这样做,这看起来很难看:
ruby -rubygems -e 'require "foobar"; p FooBar.question' # => "answer"
Run Code Online (Sandbox Code Playgroud)
或者有没有办法让2个开关工作?
注意:我知道gem可以为每个有用的方法添加bin/program但我不喜欢不必要地污染命令行命名空间