小编Sco*_*ott的帖子

Ruby中神秘的数据类是什么?

今天,我偶然发现了Ruby中神秘的Data类,我找不到任何有用的信息,或者它为什么存在.我认为它是语言实现本身的一部分.

有人知道它的作用吗?

mbp-scott:~ scott$ irb
ruby-1.9.3-p0 :001 > Data
=> Data
ruby-1.9.3-p0 :002 > Data.is_a? Module
=> true
ruby-1.9.3-p0 :003 > Data.is_a? Class
=> true
ruby-1.9.3-p0 :004 > Data.ancestors
=> [Data, Object, Kernel, BasicObject]
ruby-1.9.3-p0 :005 > Data.methods
=> [:allocate, :new, :superclass, :freeze, :===, :==, :<=>, :<, :<=, :>,
:>=, :to_s,:included_modules, :include?, :name, :ancestors, :instance_methods,
:public_instance_methods, :protected_instance_methods, :private_instance_methods,
:constants, :const_get, :const_set, :const_defined?, :const_missing, :class_variables,
:remove_class_variable, :class_variable_get, :class_variable_set,
:class_variable_defined?, :public_constant, :private_constant, :module_exec,
:class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?,
:private_method_defined?, :protected_method_defined?, :public_class_method
:private_class_method, …
Run Code Online (Sandbox Code Playgroud)

ruby

21
推荐指数
1
解决办法
1683
查看次数

为什么我不能使用新的Ruby 1.9.2哈希语法将整数用作键?

Ruby 1.9.2中的新哈希语法意味着我可以执行以下操作:

my_hash = {a: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

......相当于:

my_hash = {:a => 1, :b => 2, :c => 3}
Run Code Online (Sandbox Code Playgroud)

好的,所以使用旧的语法可以做到这一点(第一个键是一个整数):

my_hash = {1 => 1, :b => 2, :c => 3}
Run Code Online (Sandbox Code Playgroud)

而且我发现甚至可以将新语法和旧语法混合使用:

my_hash = {1 => 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

因此,如果我们援引"最少惊喜原则",人们会认为以下是合法的:

my_hash = {1: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

......但事实并非如此.它会生成语法错误:

SyntaxError: (irb):40: syntax error, unexpected '='
my_hash =  = {1: 1, b: 2, c: 3}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这是否是解析器的限制,还是有很好的理由说明为什么这是不可能的,或允许的?

ruby hash

14
推荐指数
1
解决办法
2946
查看次数

MacVim:如何为我的缓冲区设置左沟(边距)?

在MacVim中,我在所有缓冲区中编辑的文本都在缓冲区的左侧卡住了.我发现这在视觉上非常刺耳,特别是如果我正在观察垂直分裂.

看起来我的文本和窗口边框之间只有一个像素.

是否有设置允许我将字符宽度添加为装订线或边距?

vim macvim

13
推荐指数
1
解决办法
8672
查看次数

克隆类实例,只更改一些属性

我想知道在F#中是否有一些糖来克隆一个只改变一个或几个属性的类实例.

我知道在F#中可以使用记录:

let p2 = {p1 with Y = 0.0}
Run Code Online (Sandbox Code Playgroud)

f# clone

11
推荐指数
2
解决办法
2836
查看次数

Clojure - 使用自定义实现混合协议默认实现

在Clojure中,我希望有一个协议,其中一些方法具有默认实现,而一些方法具有自定义实现.第一个用于配置后者.这是一个例子:

(defprotocol Saving
  (save [this] "saves to mongodb")
  (collection-name [this] "must return a string representing the associated MongoDB collection"))

;Default implementation

(extend-type Object
  Saving
  ; the `save` method is common for all, so it is actually implemened here
  (save [this] (mc/insert (collection-name [this]) this))
  ; this method is custom to every other type
  (collection-name [this] "no_collection"))

;Particular implementations

(defrecord User
  [login password]
  Saving
  (collection-name [this] "users"))

(defrecord NewsItem
  [text date]
  Saving
  (collection-name [this] "news_items"))
Run Code Online (Sandbox Code Playgroud)

但是,它不会以这种方式工作.即使调用collection-name一个UserNewsItem …

protocols clojure

10
推荐指数
1
解决办法
1513
查看次数

C#到F#Interop:如何在F#函数类型签名中指定C#方法的可选参数?

我在一些C#代码中有以下方法:

Qux MyFunc(Foo foo, Bar bar, int baz = 1);
Run Code Online (Sandbox Code Playgroud)

我想将它添加为我的新F#Record类型的字段.我将稍后将C#函数分配给我的记录字段,使用F#代码.

如果我忽略了最终参数baz的默认属性,那么我的类型将如下所示:

type MyType = {
    MyFunc: Foo * Bar * int -> Qux
}
Run Code Online (Sandbox Code Playgroud)

但是,因为我们有可选的C#参数,所以我想反映一下.我已尝试使用此处提到的Optional属性,但它不起作用:

type MyType = {
    MyFunc: Foo * Bar * [<Optional;DefaultParameterValue(null)>] int -> Qux
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他组合,例如问号前缀?baz.

这样做的正确方法是什么(如果可能的话)?

更新和摘要

虽然这可能做到这一点类型成员,它是不是能够做到这一点的一个值(录音).我正在使用F#3.1,所以将来可能会这样.

为了公平地奖励积分,我将赞成@ Daniel-Fabian,他确认了这种情况,并将@ Mark-Seemann的解决方案作为答案,因为虽然这不是我想要的答案,但它解决了我的问题.问题.

c# f# interop

4
推荐指数
1
解决办法
883
查看次数

使用ActiveModel验证Rails

我一直在阅读文档以获得ActiveRecord验证ActiveModel.出于某种原因,我没有看到任何返回的验证结果.

我有一组模型,ActiveRecord它们通过一个将位于Rails后面的自定义API连接而不是接口.

该模型:

class ApiObject < ApiConnector
  include ActiveModel::Validations
  attr_accessor :fieldName

  validates :fieldName, :presence => true
  def save
    #save method implementation
  end
end
Run Code Online (Sandbox Code Playgroud)

控制者:

def create
  @apiObject = ApiObject.new(params[:api_object])

  respond_to do |format|
    if @apiObject.save
      format.html { redirect_to(@apiObject, :notice => 'User was successfully created.') }
      format.xml  { render :xml => @apiObject, :status => :created, :location => @apiObject }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @apiObject.errors, :status => :unprocessable_entity …
Run Code Online (Sandbox Code Playgroud)

validation ruby-on-rails activemodel ruby-on-rails-3

1
推荐指数
1
解决办法
6533
查看次数