小编Tel*_*hus的帖子

如何验证传递给Ruby中的方法的函数?

我正在编写一个库来对Ruby中的字节进行人性化处理(例如,将字节数1025转换为字符串1.1K),而我仍然坚持设计的一个元素.

该计划是Numeric使用一种humanize方法进行扩展,该方法在对数字进行调用时返回对人类友好的字符串.看着源后数::字节::人(Perl模块,我想了很多本),我决定把两个选项添加到方法:一是使用1000个字节的块和一个使用floor,而不是ceil为默认舍入功能.

为了最大限度地灵活,方法的定义使用参数的哈希,以便用户可以更改一个或两个选项.如果未传递任何参数,则使用默认哈希.这给了我这样的东西:

def humanize(params = {})
  params = {:block => 1024, :r_func => lambda }.merge params
  # yada yada
end
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想让用户传递一个函数作为值params[:r_func],但我无法弄清楚如何验证它是ceil或者floor.因为我无法理解这一点,所以我最终做了以下事情,感觉非常笨拙:

  def humanize(params = {})
    params = {:block => 1024, :r_func => 'ceil' }.merge params
    if params[:r_func].eql? 'ceil'
      params[:r_func] = lambda { |x| x.ceil }
    elsif params[:r_func].eql? 'floor'
      params[:r_func] = lambda { |x| x.floor }
    else 
      raise BadRound, "Rounding method must be 'ceil' …
Run Code Online (Sandbox Code Playgroud)

ruby parameters methods

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

Ruby中的字符串和符号有什么区别?

我使用Sphinx插件进行搜索和配置

define_index do
  indexes First_name, :sortable => true
  set_property :min_prefix_len => 1
end
Run Code Online (Sandbox Code Playgroud)

这里First_name是列名.

但我收到"搜索守护程序无法运行"的错误.当我将列名称作为符号时,它会完美运行.

define_index do
  indexes :First_name, :sortable => true
  set_property :min_prefix_len => 1
end
Run Code Online (Sandbox Code Playgroud)

请告诉我.

ruby

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

如何更新rails 2.3.10到3.x.

目前我正在使用rails 2.3.10,我想将我的rails版本更新到版本3.更新rails的命令是什么?

ruby rubygems ruby-on-rails

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

为什么Haskell中的这两个函数具有相同的类型?

我正在研究Graham Hutton的Haskell编程,第3章的练习问"什么是类型?" 为功能twice f x = f (f x).

我想我理解为什么答案是twice :: (t -> t) -> t -> t.(编辑:我明白为什么.看看我对Paolo答案的评论.)然而,为了实验,我写了另一个函数thrice f x = f (f (f x)).

我绝对明白的是为什么thrice还有一种类型thrice :: (t -> t) -> t -> t.

它们以我期望的方式工作(见下文),但我看不出这种类型是否thrice有意义.

来自ghci:

>> twice tail [0,1,2,3,4]
[2,3,4]
>> thrice tail [0,1,2,3,4]
[3,4]
Run Code Online (Sandbox Code Playgroud)

haskell types function

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

Bash脚本:mkdir错误

我有以下脚本示例:

#!/bin/bash

# Aborts the script on "simple command failure" (does not cover pipes)
set -e

# Makes sure we do not run the script outside the correct directory (i.e. the backup directory)
projects_directory='~/projects' 
backup_drectory="${projects_directory}/backup/"
echo "Backup directory: ${backup_drectory}"

if [ ! -d "$projects_directory" ]; then 
    mkdir "$projects_directory"
    echo "${projects_directory} created successfully" 
fi
Run Code Online (Sandbox Code Playgroud)

通过以下输出可能会失败:

Backup directory: ~/projects/backup/
mkdir: cannot create directory `~/projects': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不懂为什么.如果我mkdir ~/projects在终端中手动输入命令,则会创建目录.任何建议都是最受欢迎的.

bash quotes sh mkdir

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

Ruby 中的类型无关比较

我确定这是 Ruby 中的一个基本问题:

有没有办法检查是否

a == b
Run Code Online (Sandbox Code Playgroud)

即使 a 是整数而 b 是字符串?我意识到我可以做到

a.to_s == b.to_s 
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有其他更好的方法。

ruby syntax

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

如何在Ruby中定义实例方法?

我正在尝试定义一个名为的方法function.它在我这样做时有效:

a = A.new

def a.function
   puts 100
end
Run Code Online (Sandbox Code Playgroud)

但我希望该方法适用于任何实例变量,而不仅仅是a.例如,当我调用其他function实例时,没有任何反应.所以我习惯定义函数而不是.AaA::fa.function

class A
    attr_accessor :function
    attr_accessor :var
end

def A::function
    self.var = 0x123
end

a = A.new
a.function

puts a.var
Run Code Online (Sandbox Code Playgroud)

这编译很好,但当我尝试调用该函数时,我得到一个错误.为什么它不起作用,我怎么能做我正在尝试的事情?

ruby

-1
推荐指数
2
解决办法
270
查看次数

C变量定义

在C整数和短整数变量是相同的:范围从-32768到32767,并且两者的所需字节也相同,即2.

那么为什么需要两种不同的类型呢?

c

-3
推荐指数
1
解决办法
107
查看次数

标签 统计

ruby ×5

bash ×1

c ×1

function ×1

haskell ×1

methods ×1

mkdir ×1

parameters ×1

quotes ×1

ruby-on-rails ×1

rubygems ×1

sh ×1

syntax ×1

types ×1