如何在带正则表达式的文档中找到所有CamelCased单词?我只关心领先的上骆驼案(即第一个字母大写的骆驼套话).
我正在尝试构建一个API包装器gem,并且在将API返回的JSON转换为更多Rubyish格式时遇到问题.
JSON包含多层嵌套,包括哈希和数组.我想要做的是递归地将所有键转换为snake_case以便于使用.
这是我到目前为止所得到的:
def convert_hash_keys(value)
return value if (not value.is_a?(Array) and not value.is_a?(Hash))
result = value.inject({}) do |new, (key, value)|
new[to_snake_case(key.to_s).to_sym] = convert_hash_keys(value)
new
end
result
end
Run Code Online (Sandbox Code Playgroud)
上面调用此方法将字符串转换为snake_case:
def to_snake_case(string)
string.gsub(/::/, '/').
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
tr("-", "_").
downcase
end
Run Code Online (Sandbox Code Playgroud)
理想情况下,结果类似于以下内容:
hash = {:HashKey => {:NestedHashKey => [{:Key => "value"}]}}
convert_hash_keys(hash)
# => {:hash_key => {:nested_hash_key => [{:key => "value"}]}}
Run Code Online (Sandbox Code Playgroud)
我得到的递归是错误的,我试过的这种解决方案的每个版本都不会将符号转换为超出第一级别,或者过度使用并尝试转换整个哈希值,包括值.
尝试在辅助类中解决所有这些问题,而不是修改实际的Hash和String函数(如果可能).
先感谢您.
我有一堆类将在某些时候序列化为JSON,为了遵循后端的C#约定和前端的JavaScript约定,我一直在定义这样的属性:
[JsonProperty(PropertyName="myFoo")]
public int MyFoo { get; set; }
Run Code Online (Sandbox Code Playgroud)
所以在C#中我可以:
MyFoo = 10;
Run Code Online (Sandbox Code Playgroud)
在Javascript我可以:
if (myFoo === 10)
Run Code Online (Sandbox Code Playgroud)
但是为每个房产做这件事都很乏味.是否有一种快速简便的方法来设置JSON.Net处理属性名称的默认方式,因此除非另有说明,否则它将自动进入案例?
PHP手册建议自动加载类
function __autoload($class_name){
require_once("some_dir/".$class_name.".php");
}
Run Code Online (Sandbox Code Playgroud)
并且这种方法可以很好地加载FooClass保存在文件中的my_dir/FooClass.php类
class FooClass{
//some implementation
}
Run Code Online (Sandbox Code Playgroud)
题
如何才能使用保存在文件中的_autoload()功能和访问权限?FooClassmy_dir/foo_class.php
问题在标题中.我习惯在开发中使用camelcase,因为有设计的交叉,想知道是否有任何技术原因(不论意见)反对在HTML中使用它.提前感谢您的回复.
是否有emacs函数将驼峰式单词转换为下划线?就像是:
longVariableName
M-x to-underscore
long_variable_name
在R中,我想转换
t1 <- c('this.text', 'next.text')
"this.text" "next.text"
Run Code Online (Sandbox Code Playgroud)
至
'ThisText' 'NextText'
Run Code Online (Sandbox Code Playgroud)
我试过了
gsub('\\..', '', t1)
Run Code Online (Sandbox Code Playgroud)
但这给了我
"thisext" "nextext"
Run Code Online (Sandbox Code Playgroud)
因为在这段时间之后它不会取代这封信.
可能真的很容易,但我无法解决.
根据你的解释,这可能是也可能不是一个修辞问题,但它真的让我感到困惑.这个惯例有什么意义?我理解命名约定不一定要有背后的押韵或理由,但为什么偏离已经流行的camelCase?我不知道有什么押韵和背后的原因lower_case_with_underscores吗?(是的,我完整地阅读了PEP 8,是的,我确实理解它只是一个提案,指南等)
我想我的真正问题是:我正在编写一个Python库.事实上,运气好的话,相对于我的其他项目,它可能是一个相当大的库.我已经尝试尽可能地遵守PEP 8,到目前为止,我甚至保持lower_case_with_underscoresPEP 8指示功能和方法名称.但是我不得不记得使用camelCase for Twisted,camelCase logging以及其他所有东西.我应该使用什么命名约定,为什么?
令人惊讶的是,我非常关心命名,足以写出一个冗长的问题,而且我也很惊讶.也许在这些事情上我有一点强迫症.我没有太多关于它的"个人意见",因为我倾向于选择最常用的东西,在这种情况下,将是camelCase - 但它让我更加恼火的是找到那个我可能正在打破一些关于明确与隐含的永恒定律以及用石头或其他东西写成的蟒蛇的禅.
有没有办法转换这样的东西:
MyDirectoryFileLine
Run Code Online (Sandbox Code Playgroud)
至
my-directory-file-line
Run Code Online (Sandbox Code Playgroud)
我找到了一些方法将所有字母转换为大写或小写,但不是这样; 有任何想法吗?
TL/DR:使用强调命名约定服务器端(RoR)和基于camelCased命名约定clientide(JS)的好方法
像Ruby on Rails这样的服务器端编程环境使用了下划线变量.通常,JavaScript使用camelCased变量.将数据从客户端发送到服务器时,这会出现问题.
例如,考虑将用户信息发送到客户端.数据库中可能有一个名为num_times_ordered的属性,但在JavaScript中,您传统上希望将其称为numTimesOrdered.
有没有人想出一个优雅的方式处理这个?这里有一些选项,没有一个特别好:
我倾向于#3,并在我的JavaScript中使用下划线.但是,当我使用基于camelCased的第三方库时,它看起来很奇怪.