我正在编写一个库来对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) 我使用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)
请告诉我.
目前我正在使用rails 2.3.10,我想将我的rails版本更新到版本3.更新rails的命令是什么?
我正在研究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) 我有以下脚本示例:
#!/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
在终端中手动输入命令,则会创建目录.任何建议都是最受欢迎的.
我确定这是 Ruby 中的一个基本问题:
有没有办法检查是否
a == b
Run Code Online (Sandbox Code Playgroud)
即使 a 是整数而 b 是字符串?我意识到我可以做到
a.to_s == b.to_s
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有其他更好的方法。
我正在尝试定义一个名为的方法function
.它在我这样做时有效:
a = A.new
def a.function
puts 100
end
Run Code Online (Sandbox Code Playgroud)
但我希望该方法适用于任何实例变量,而不仅仅是a
.例如,当我调用其他function
实例时,没有任何反应.所以我习惯定义函数而不是.A
a
A::f
a.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)
这编译很好,但当我尝试调用该函数时,我得到一个错误.为什么它不起作用,我怎么能做我正在尝试的事情?