ruby - Cocoapods RUBY 未定义的局部变量或方法
问题描述
我仍然是 Ruby 的初学者。我正在尝试编写一些额外的代码来处理我们的 50 个目标 Cocoapods 依赖项。
使用以下代码:
testString = "TEST!!!"
def processPods(platform_name)
project = Xcodeproj::Project.open "./WhiteLabel.xcodeproj"
project.targets.each { |target|
target_name = target.name
if target.platform_name == platform_name
puts "Processing #{target_name} for Platform #{platform_name}"
puts testString #-->Error ...
end
}
end
#Cocoapods methods
abstract_target 'iOS' do
puts testString #-->Executes
processPods(:ios)
end
为了这个问题,“testString”替换了一个更大的变量。
当我运行代码时,我得到:
TEST!!!
Processing WhiteLabel for Platform ios
[!] Invalid `Podfile` file: undefined local variable or method `testString' for #<Pod::Podfile:0x00007f8fe11cc2d0>.
# from ~/Documents/Developer/Xcode/WhiteLabelApple/Podfile:124
# -------------------------------------------
# puts "Processing #{target_name} for Platform #{platform_name}"
> puts testString
# end
# -------------------------------------------
知道为什么吗?
解决方案
如果您不想更改变量名,您可以利用 Ruby 块是闭包这一事实;封闭变量可在块内访问。
test_string = "TEST!!!"
process_pods = lambda do |platform_name|
project = Xcodeproj::Project.open "./WhiteLabel.xcodeproj"
project.targets.each { |target|
target_name = target.name
if target.platform_name == platform_name
puts "Processing #{target_name} for Platform #{platform_name}"
puts test_string #-->Should work ...
end
}
end
abstract_target 'iOS' do
puts test_string #-->Executes
process_pods.call(:ios)
end
有时,不可能将变量更改为常量,因为它实际上是变量。因此,将代码放在一个块中提供了一种在不牺牲对周围变量的访问权限的情况下组织代码的方法。
推荐阅读
- sql - 在 oracle 中编辑请求(添加正确的左侧连接)
- javascript - 在 Vue.js 中调用 AJAX 后重新加载轮播
- excel - 过滤后vba计数可见行
- asp.net-mvc - 返回 RedirectToAction 不起作用
- vue.js - 奇怪的 VueJS 路由行为
- magento - Magento 1.9 - OroCRM 更新同步无法正常工作
- r - 非整数计数的泊松 GLM - R
- viewcontroller - 从另一个 VC 调用 var 的行代码是什么?
- github - 即使 PR 是针对另一个功能分支创建的,github 是否会将这个 PR 合并到“主”分支中?
- vb.net - ActiveReports 10 SectionReport Byval 变量