在关于Haskell wiki的关于记录的模式匹配的相对简短的文本之后,我不确定记录的字段是否可以与某个值匹配并且同时分配给参数.
-- Sample record type
data Rec = Rec { uid :: Int, name :: String }
-- Function to update Rec's fields
updateRec :: Rec -> Rec
-- basic matching with record data constructor
updateRec (Rec _ []) = Rec 0 "Nobody"
-- dtto with as-pattern at 2nd param
updateRec (Rec idn ns@"Alice") = Rec (idn+1) (ns ++ "+1")
-- basic matching by fields values
updateRec Rec {name = "Bob", uid = 42} = Rec (10^6) "SuperBob"
-- …
Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么下面这些简单的代码(Euclid算法的实现找到最大的共同点)比Ruby中的等效代码慢3倍?
iter_gcd.py的内容:
from sys import argv,stderr
def gcd(m, n):
if n > m:
m, n = n, m
while n != 0:
rem = m % n
m = n
n = rem
return m
# in Python3 code there is xrange replaced with range function
def main(a1, a2):
comp = 0
for j in xrange(a1, 1, -1):
for i in xrange(1, a2):
comp += gcd(i,j)
print(comp)
if __name__ == '__main__':
if len(argv) != 3:
stderr.write('usage: {0:s} num1 num2\n'.format(argv[0]))
exit(1) …
Run Code Online (Sandbox Code Playgroud) 任何人都可以推荐使用以下选项解析CSV文件的方法:
我确实尝试过Text.CSV,但它非常简单,并且缺少大部分上述功能.是否有一些更高级的CSV解析模块或者我必须"从头开始"编写它,即使用Text.ParserCombinators?我不打算重新发明轮子.
照顾自己.
我无法理解为什么在以下示例中访问模块的类变量失败:
module M
@@xyz = 123
end
M.class_variables # [:@@xyz]
M.class_variable_get :@@xyz # 123 , so far so good
class C
extend M
end
C.singleton_class.class_variables # [:@@xyz]
C.singleton_class.class_variable_get :@@xyz # NameError:
# uninitialized class variable @@xyz in Class
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么类变量@@xyz
在C
单例类中突然无法/未定义?
更新: 我使用不同的Ruby YARV版本重新测试了上面的代码,并将其作为最新的回归.
更新2:
Module#class_variables
在最新的Ruby生成中,方法的定义发生了变化.
Ruby的定义是1.9.3
class_variables →数组
返回mod中类变量名称的数组.
Ruby 2.0.0最新稳定版
class_variables(inherit = true) →数组
返回mod中类变量名称的数组.除非将inherit参数设置为false,否则这包括任何包含的模块中的类变量的名称.
所以在最新的Ruby化身中,class_variables
默认情况下还返回包含模块的类变量.只是好奇这个功能是什么,或者它是否仍然关注模块"包括" include
与否extend
.
谁能解释一下?
在没有Rails环境的情况下让I18n工作有麻烦:
irb> require 'i18n'
=> true
irb> I18n.load_path=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml']
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml"]
irb> I18n.load_path+=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml']
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml", "/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml"]
irb> I18n.locale=:sk
=> :sk
irb> I18n.default_locale=:sk
=> :sk
irb> I18n.l Time.now
I18n::MissingTranslationData: translation missing:
sk.time.formats.default
from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:289:in
`handle_exception'
from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:159:in
`translate'
from
/usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n/backend/base.rb:55:in
`localize'
from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:236:in
`localize'
from (irb):11
from /usr/bin/irb:12:in `<main>'
irb>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?sk.yml包含sk.time.formats.default元素!!
另外,I18n的默认load_path是什么,所以我不打算为每个翻译YAML/Ruby文件提供完整路径?
谢谢.
我希望Firefox(在Linux上运行)用外部应用程序打开自定义协议.
例如,以gvim://
协议名称开头的url 应该启动gvim并传递其余的url.
我试图设置network.protocol-handler.external.gvim
,network.protocol-handler.app.gvim
通过Mozilla的知识库但是火狐仍然抛出未知协议试图打开时的错误消息gvim://
的URL.但没有提供如何处理该协议的提示.对于Firefox版本来说,知识库似乎已经过时了.27.
如何在最近的Firefox版本中正确配置自定义协议处理程序的任何想法?我在没有GNOME的情况下运行Linux.
是否可以在Haskell(GHC)中使用国家字符对字符串进行正确排序?换句话说,按当前区域设置正确整理Chars?
我确实只找到了ICU模块,但它需要安装额外的库,因为它不是linux发行版的标准部分.我想要基于POSIX的C(glibc like)库的解决方案,因此处理额外的依赖关系不会有任何麻烦.
我正在寻找Delphi Data.FmtBcd库的替代品,因为我只是达到它可以表示的最大十进制数字的限制,并且程序终止于EBcdOverflowException.对于好奇,我正在计算算术系列成员,需要处理非常大的数字 - 数十万个位置并不是那么罕见.并在合理的时间内获得结果.我确实将部分代码重写为Python 3.2用于测试目的,并且计算速度足以满足Delphi的要求.
有关此类库的一些建议,最好是免费还是开源?
希望简单的问题得到一个简单的答案 我只想编写Django的过滤器,以便我得到格式化的浮点数区域设置感知:
{{123.45|floatformat:1}}
"123.5" <= correct
{{123.45|localize}}
"123,45" <= correct, in my locales decimal separator is a comma
{{123.45|floatformat:1|localize}}
"123.5" <= wrong, point instead of comma. Expected output: "123,5"
Run Code Online (Sandbox Code Playgroud)
如何同时应用这两个过滤器?
谢谢.
对于Django模型,我使用的是django-import-export包.
如果需要导出更多只有可用的模型字段(如属性或自定义字段),可以使用import_export.fields.Field
类和可选dehydrate_<field>
方法添加new .
from import_export import resources, fields, instance_loaders
class ProductResource(resources.ModelResource):
categories = fields.Field()
price = fields.Field(attribute='unit_price')
class Meta:
model = Product
def dehydrate_categories(self, product):
return ';'.join(
'/%s' % '/'.join([c.name for c in cat.parents()] + [cat.name])
for cat in product.category.iterator() )
Run Code Online (Sandbox Code Playgroud)
它确实运作良好,但仅适用于出口.那么进口,反向过程呢?dehydrate_
方法有一些对应的吗?
到目前为止,我已经覆盖了get_or_init_instance
方法:
class ProductResource(resources.ModelResource):
def get_or_init_instance(self, instance_loader, row):
row['unit_price'] = row['price']; row.pop('price')
return super(ProductResource, self).get_or_init_instance(instance_loader, row)
Run Code Online (Sandbox Code Playgroud)
但怀疑这是正确的方法.
将不胜感激任何提示如何处理自定义字段的导入.
haskell ×3
python ×3
ruby ×3
django ×2
bcd ×1
bigdecimal ×1
biginteger ×1
csv ×1
delphi ×1
firefox ×1
i18n-gem ×1
locale ×1
localization ×1
python-3.x ×1
satchmo ×1
string ×1